zoukankan      html  css  js  c++  java
  • Java 实现ftp 文件上传、下载和删除

    实现FTP相关功能

    1、下载相应的jar包

      commons-net-3.6.jar

    2、代码实现

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    import org.apache.commons.net.ftp.FTPClient;
    import org.apache.commons.net.ftp.FTPFile;
    import org.apache.commons.net.ftp.FTPReply;
    
    /**
     * FTP 操作类
     * @author d
     * @version 1.0
     * 2019.12.12
     */
    public class FtpUtil {
        
        public static void main(String[] args) {
            FtpUtil ftpUtil = new FtpUtil();
            ftpUtil.downLoadFile("/", "", "D:/test");
    //        ftpUtil.uploadFile("/1", "1.zip", "D:/test/1.zip");
    //        ftpUtil.deleteFile("/1", "1.zip");
        }
        
        /**
         * Ftp 服务器地址
         **/
        public String hostname = "127.0.0.1";
        /**
         * Ftp 端口号
         **/
        public int port = 21;
        /**
         * Ftp 登录账号
         **/
        public String username = "root";
        /**
         * Ftp 登录密码
         **/
        public String password = "root";
        /**
         * 设置缓冲区大小4M
         **/
        private static final int BUFFER_SIZE = 1024 * 1024 * 4;
        /**
         * Ftp 操作对象
         **/
        public FTPClient ftpClient = null;
    
        /**
         * 连接FTP服务器
         *
         * @param address  地址
         * @param port     端口
         * @param username 用户名
         * @param password 密码
         */
        private void login() {
            ftpClient = new FTPClient();
            ftpClient.setControlEncoding("utf-8");
            try {
                ftpClient.connect(hostname, port);
                ftpClient.login(username, password);
                ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);//文件类型为二进制文件
                ftpClient.setBufferSize(BUFFER_SIZE);//限制缓冲区大小
                int reply = ftpClient.getReplyCode();
                if (!FTPReply.isPositiveCompletion(reply)) {
                    closeConnect();
                    System.out.println("FTP服务器连接失败");
                }
            } catch (Exception e) {
                System.out.println("FTP登录失败" + e.getMessage());
            }
        }
    
        /**
         * 关闭FTP连接
         */
        private void closeConnect() {
            if (ftpClient != null && ftpClient.isConnected()) {
                try {
                    ftpClient.logout();
                    ftpClient.disconnect();
                } catch (IOException e) {
                    System.out.println("关闭FTP连接失败" + e.getMessage());
                }
            }
        }
        
        /**
         * 下载文件
         * @param ftpPath FTP文件目录
         * @param fileName 需下载的文件名
         * @param savePath 下载后的文件路径
         * @return 返回是否下载成功 true
         */
        public Boolean downLoadFile(String ftpPath, String fileName, String savePath){
            login();
            OutputStream os = null;
            if (ftpClient != null) {
                try {
                    //判断是否存在该目录
                    if (!ftpClient.changeWorkingDirectory(ftpPath)) {
                        System.out.println("/" + ftpPath + "该目录不存在");
                        return false;
                    }
                    ftpClient.enterLocalPassiveMode();//设置被动模式,开通一个端口来传输数据
    
                    FTPFile[] ftpFiles = ftpClient.listFiles();
                    // 判断该目录下是否有文件
                    if (ftpFiles == null || ftpFiles.length == 0) {
                        System.out.println("/" + ftpPath + "该目录下无文件");
                        return false;
                    }
                    for(FTPFile file : ftpFiles){
                        if(fileName.equals("") || fileName.equalsIgnoreCase(file.getName())){//文件名称为"",下载指定文件
                            if(!file.isDirectory()){//是否文件夹 
                                File saveFile = new File(savePath + "/" + file.getName()); 
                                os = new FileOutputStream(saveFile); 
                                ftpClient.retrieveFile(file.getName(), os); 
                                os.close(); 
                            }
                        }
                    }
                    return true;
                } catch (IOException e) {
                    System.out.println("下载文件失败" + e.getMessage());
                } finally {
                    if(null != os){
                        try {
                            os.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        } 
                    }
                    closeConnect();
                }
            }
            return false;
        }
    
        /**
        * 上传文件
        * @param savePath FTP保存目录
        * @param fileName 上传到FTP的文件名
        * @param filePath 待上传文件的名称(绝对地址)
        * @return
        */
        public boolean uploadFile(String savePath, String fileName,String filePath){
            login();
            boolean flag = false;
            InputStream inputStream = null;
            if (ftpClient != null) {
                try{
                    inputStream = new FileInputStream(new File(filePath));
                    ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
                    ftpClient.makeDirectory(savePath);
                    ftpClient.changeWorkingDirectory(savePath);
                    ftpClient.storeFile(fileName, inputStream);
                    inputStream.close();
                    flag = true;
                }catch (Exception e) {
                    e.printStackTrace();
                }finally{
                    if(null != inputStream){
                        try {
                            inputStream.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        } 
                    }
                    closeConnect();
                }
            }
            return flag;
        }
    
        /** * 删除文件 * 
        * @param pathname FTP服务器保存目录
        * @param filename 要删除的文件名称 
        * @return */ 
        public boolean deleteFile(String filePath, String filename){
            login();
            boolean flag = false; 
            if (ftpClient != null) {
                try { 
                    ftpClient.changeWorkingDirectory(filePath);
                    ftpClient.dele(filename); 
                    flag = true; 
                } catch (Exception e) { 
                    e.printStackTrace(); 
                } finally {
                    closeConnect();
                }
            }
            return flag; 
        }
        
    }
  • 相关阅读:
    [Luogu P3626] [APIO2009] 会议中心
    杭电 1869 六度分离 (求每两个节点间的距离)
    杭电 1874 畅通工程续 (求某节点到某节点的最短路径)
    最短路径模板
    杭电 2544 最短路径
    POJ 1287 Networking (最小生成树模板题)
    NYOJ 1875 畅通工程再续 (无节点间距离求最小生成树)
    POJ 2485 Highways (求最小生成树中最大的边)
    杭电 1233 还是畅通工程 (最小生成树)
    杭电 1863 畅通工程 (最小生成树)
  • 原文地址:https://www.cnblogs.com/LEON-D/p/12049465.html
Copyright © 2011-2022 走看看