whycxzp
2025-05-09 f92783da5430037bf80cf28a5cf7091cdecefbb7
src/main/java/com/whyc/dto/FtpHelper.java
@@ -1,220 +1,301 @@
package com.whyc.dto;
import com.enterprisedt.net.ftp.FTPClient;
import com.enterprisedt.net.ftp.FTPConnectMode;
import com.enterprisedt.net.ftp.FTPTransferType;
import org.apache.commons.lang.StringUtils;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
public class FtpHelper {
    private FTPClient ftp;
    /**
     * 初始化Ftp信息
     *
     * @param ftpServer   ftp服务器地址
     * @param ftpPort     Ftp端口号
     * @param ftpUsername ftp 用户名
     * @param ftpPassword ftp 密码
     */
    public FtpHelper(String ftpServer, int ftpPort, String ftpUsername,
                     String ftpPassword) {
        connect(ftpServer, ftpPort, ftpUsername, ftpPassword);
    }
    /**
     * 连接到ftp
     *
     * @param ftpServer   ftp服务器地址
     * @param ftpPort     Ftp端口号
     * @param ftpUsername ftp 用户名
     * @param ftpPassword ftp 密码
     */
    public void connect(String ftpServer, int ftpPort, String ftpUsername, String ftpPassword) {
        ftp = new FTPClient();
        try {
            ftp.setControlEncoding("UTF-8");
            ftp.setRemoteHost(ftpServer);
            ftp.setRemotePort(ftpPort);
            ftp.setTimeout(6000);
            ftp.setConnectMode(FTPConnectMode.ACTIVE);
            ftp.connect();
            ftp.login(ftpUsername, ftpPassword);
            ftp.setType(FTPTransferType.BINARY);
        } catch (Exception e) {
            e.printStackTrace();
            ftp = null;
        }
    }
    /**
     * 更改ftp路径
     *
     * @param ftp
     * @param dirName
     * @return
     */
    public boolean checkDirectory(FTPClient ftp, String dirName) {
        boolean flag;
        try {
            ftp.chdir(dirName);
            flag = true;
        } catch (Exception e) {
            //e.printStackTrace();
            flag = false;
        }
        return flag;
    }
    /**
     * 断开ftp链接
     */
    public void disconnect() {
        try {
            if (ftp.connected()) {
                ftp.quit();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 读取ftp文件流
     *
     * @param filePath ftp文件路径
     * @return s
     * @throws Exception
     */
    public InputStream downloadFile(String filePath) throws Exception {
        InputStream inputStream = null;
        String fileName = "";
        filePath = StringUtils.removeStart(filePath, "/");
        int len = filePath.lastIndexOf("/");
        if (len == -1) {
            if (filePath.length() > 0) {
                fileName = filePath;
            } else {
                throw new Exception("没有输入文件路径");
            }
        } else {
            fileName = filePath.substring(len + 1);
            String type = filePath.substring(0, len);
            String[] typeArray = type.split("/");
            for (String s : typeArray) {
                ftp.chdir(s);
            }
        }
        byte[] data;
        try {
            data = ftp.get(fileName);
            inputStream = new ByteArrayInputStream(data);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return inputStream;
    }
    /**
     * 上传文件到ftp
     *
     * @param file     文件对象
     * @param filePath 上传的路径
     * @throws Exception
     */
    public void uploadFile(File file, String filePath) throws Exception {
        InputStream inStream = new FileInputStream(file);
        uploadFile(inStream, filePath);
    }
    /**
     * 上传文件到ftp
     *
     * @param inStream 上传的文件流
     * @param filePath 上传路径
     * @throws Exception
     */
    public void uploadFile(InputStream inStream, String filePath)
            throws Exception {
        if (inStream == null) {
            return;
        }
        String fileName = "";
        filePath = StringUtils.removeStart(filePath, "/");
        int len = filePath.lastIndexOf("/");
        if (len == -1) {
            if (filePath.length() > 0) {
                fileName = filePath;
            } else {
                throw new Exception("没有输入文件路径");
            }
        } else {
            fileName = filePath.substring(len + 1);
            String type = filePath.substring(0, len);
            String[] typeArray = type.split("/");
            for (String s : typeArray) {
                if (!checkDirectory(ftp, s)) {
                    ftp.mkdir(s);
                }
            }
        }
        ftp.put(inStream, fileName);
    }
    /**
     * 删除ftp文件
     *
     * @param filePath 文件路径
     * @throws Exception
     */
    public void deleteFile(String filePath) throws Exception {
        String fileName = "";
        filePath = StringUtils.removeStart(filePath, "/");
        int len = filePath.lastIndexOf("/");
        if (len == -1) {
            if (filePath.length() > 0) {
                fileName = filePath;
            } else {
                throw new Exception("没有输入文件路径");
            }
        } else {
            fileName = filePath.substring(len + 1);
            String type = filePath.substring(0, len);
            String[] typeArray = type.split("/");
            for (String s : typeArray) {
                if (checkDirectory(ftp, s)) {
                    ftp.chdir(s);
                }
            }
        }
        ftp.delete(fileName);
    }
    /*
     切换目录
    public void changeDirectory(String path) {
        if (!ValidateUtils.isEmpty(path)) {
            try {
                ftp.chdir(path);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }*/
    public static void main(String[] args) {
        try { // 从ftp下载文件
            FtpHelper ftp = new FtpHelper("192.168.10.80", 21, "lxw", "lxw810412026");
            File file = new File("D:\\IDEAWorkSpace\\CadDrawManager\\target\\face.zip");
            ftp.uploadFile(file, "test/face.zip");
            ftp.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
//package com.whyc.dto;
//
//import com.enterprisedt.net.ftp.*;
//import org.apache.commons.lang.StringUtils;
//
//import java.io.*;
//import java.text.ParseException;
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.LinkedList;
//import java.util.List;
//
//public class FtpHelper {
//    private FTPClient ftp;
//
//    /**
//     * 初始化Ftp信息
//     *
//     * @param ftpServer   ftp服务器地址
//     * @param ftpPort     Ftp端口号
//     * @param ftpUsername ftp 用户名
//     * @param ftpPassword ftp 密码
//     */
//    public FtpHelper(String ftpServer, int ftpPort, String ftpUsername,
//                     String ftpPassword) {
//        connect(ftpServer, ftpPort, ftpUsername, ftpPassword);
//    }
//
//    /**
//     * 连接到ftp
//     *
//     * @param ftpServer   ftp服务器地址
//     * @param ftpPort     Ftp端口号
//     * @param ftpUsername ftp 用户名
//     * @param ftpPassword ftp 密码
//     */
//    public void connect(String ftpServer, int ftpPort, String ftpUsername, String ftpPassword) {
//        ftp = new FTPClient();
//        try {
//            ftp.setControlEncoding("GBK");
//            ftp.setRemoteHost(ftpServer);
//            ftp.setRemotePort(ftpPort);
//            ftp.setTimeout(1000*60*60*12);
//            ftp.setConnectMode(FTPConnectMode.ACTIVE);
//            ftp.connect();
//            ftp.login(ftpUsername, ftpPassword);
//            ftp.setType(FTPTransferType.BINARY);
//        } catch (Exception e) {
//            e.printStackTrace();
//            ftp = null;
//        }
//    }
//
//    /**
//     * 更改ftp路径
//     *
//     * @param ftp
//     * @param dirName
//     * @return
//     */
//    public boolean checkDirectory(FTPClient ftp, String dirName) {
//        boolean flag;
//        try {
//            ftp.chdir(dirName);
//            flag = true;
//        } catch (Exception e) {
//            //e.printStackTrace();
//            flag = false;
//        }
//        return flag;
//    }
//
//    /**
//     * 断开ftp链接
//     */
//    public void disconnect() {
//        try {
//            if (ftp.connected()) {
//                ftp.quit();
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 读取ftp文件流
//     *
//     * @param filePath ftp文件路径
//     * @return s
//     * @throws Exception
//     */
//    public InputStream downloadFile(String filePath) throws Exception {
//        InputStream inputStream = null;
//        String fileName = "";
//        filePath = StringUtils.removeStart(filePath, "/");
//        int len = filePath.lastIndexOf("/");
//        if (len == -1) {
//            if (filePath.length() > 0) {
//                fileName = filePath;
//            } else {
//                throw new Exception("没有输入文件路径");
//            }
//        } else {
//            fileName = filePath.substring(len + 1);
//
//            String type = filePath.substring(0, len);
//            String[] typeArray = type.split("/");
//            for (String s : typeArray) {
//                ftp.chdir(s);
//            }
//        }
//        byte[] data;
//        try {
//            data = ftp.get(fileName);
//            inputStream = new ByteArrayInputStream(data);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return inputStream;
//    }
//
//    /**
//     * 上传文件到ftp
//     *
//     * @param file     文件对象
//     * @param filePath 上传的路径
//     * @throws Exception
//     */
//    public void uploadFile(File file, String filePath) throws Exception {
//        InputStream inStream = new FileInputStream(file);
//        uploadFile(inStream, filePath);
//    }
//
//    /**
//     * 上传文件到ftp
//     *
//     * @param inStream 上传的文件流
//     * @param filePath 上传路径
//     * @throws Exception
//     */
//    public void uploadFile(InputStream inStream, String filePath)
//            throws Exception {
//        if (inStream == null) {
//            return;
//        }
//        String fileName = "";
//        filePath = StringUtils.removeStart(filePath, "/");
//        int len = filePath.lastIndexOf("/");
//        if (len == -1) {
//            if (filePath.length() > 0) {
//                fileName = filePath;
//            } else {
//                throw new Exception("没有输入文件路径");
//            }
//        } else {
//            fileName = filePath.substring(len + 1);
//            String type = filePath.substring(0, len);
//            String[] typeArray = type.split("/");
//            for (String s : typeArray) {
//                s.trim();
//                if (!checkDirectory(ftp, s)) {
//                    if(!ftp.existsDirectory(s)) {
//                        ftp.mkdir(s);
//                    }
//                    changeDirectory(s);
//                }
//            }
//        }
//        ftp.put(inStream, fileName);
//        changeDirectory("/");
//    }
//
//    public void uploadFile2(File inFile,String fileName) throws IOException, FTPException {
//        InputStream inStream = new FileInputStream(inFile);
//        ftp.put(inStream, fileName);
//    }
//
//    /**
//     * 删除ftp文件
//     *
//     * @param filePath 文件路径
//     * @throws Exception
//     */
//    public void deleteFile(String filePath) throws Exception {
//        String fileName = "";
//        filePath = StringUtils.removeStart(filePath, "/");
//        int len = filePath.lastIndexOf("/");
//        if (len == -1) {
//            if (filePath.length() > 0) {
//                fileName = filePath;
//            } else {
//                throw new Exception("没有输入文件路径");
//            }
//        } else {
//            fileName = filePath.substring(len + 1);
//
//            String type = filePath.substring(0, len);
//            String[] typeArray = type.split("/");
//            for (String s : typeArray) {
//                if (checkDirectory(ftp, s)) {
//                    ftp.chdir(s);
//                }
//            }
//        }
//        ftp.delete(fileName);
//    }
//
//
//     //切换目录
//    public void changeDirectory(String path) {
//        if (!StringUtils.isEmpty(path)) {
//            try {
//                ftp.chdir(path);
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }
//    }
//
//    //读取文件列表
//    public List<File> getFileList(String path) {
//        List<File> rsList = new ArrayList<>();
//        if (path == null || path.equals("")) {
//            return rsList;
//        }
//        File file = new File(path);
//        if (!file.exists()) {
//            return rsList;
//        }
//        // 处理文件
//        if (file.isFile()) {
//            rsList.add(file);
//            return rsList;
//        }
//        // 处理文件夹
//        if (null == file.listFiles()) {
//            rsList.add(file);
//            return rsList;
//        }
//        LinkedList<File> forDealList = new LinkedList<>();
//        forDealList.addAll(Arrays.asList(file.listFiles()));
//        while (!forDealList.isEmpty()) {
//            File firstFile = forDealList.removeFirst();
//            // 处理文件
//            if (firstFile.isFile()) {
//                // 把文件自身先加入结果
//                rsList.add(firstFile);
//                continue;
//            }
//            // 处理文件夹
//            File[] files = firstFile.listFiles();
//            if (files == null) {
//                continue;
//            }
//            for (File curr : files) {
//                if (curr.isDirectory()) {
//                    // 将此文件夹放入待处理列表
//                    forDealList.add(curr);
//                } else {
//                    rsList.add(curr);
//                }
//            }
//        }
//        return rsList;
//    }
//
//    public void deleteDir(String dirName) throws IOException, FTPException, ParseException {
//        FTPClient client = ftp;
//
//        //String[] dir = client.dir(dirName, true);
//        FTPFile[] ftpFiles = client.dirDetails(dirName);
//        for (FTPFile ftpFile : ftpFiles) {
//            if(ftpFile.isDir()){
//                deleteDir(dirName+"/"+ftpFile.getName());
//            }else{
//                client.delete(dirName+"/"+ftpFile.getName());
//            }
//        }
//        /*for (String subDirName : dir) {
//            String name = subDirName.substring(subDirName.lastIndexOf(" ") + 1);
//            if(subDirName.contains("<DIR>")){ //文件夹
//                //name = new String(name.getBytes(StandardCharsets.ISO_8859_1),"GBK");
//                deleteDir(dirName+"/"+name);
//                //client.rmdir(dirName+"/"+name);
//            }else{
//                //name = new String(name.getBytes(StandardCharsets.ISO_8859_1),"GBK");
//                client.delete(dirName+"/"+name);
//            }
//        }*/
//        client.rmdir(dirName);
//    }
//
//    public String[] getDirList() throws IOException, FTPException {
//        return ftp.dir();
//    }
//
//    public void mkdir(String dirPath) throws IOException, FTPException {
//        ftp.mkdir(dirPath);
//    }
//}