JAVA实现FTP文件上传下载

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_44018093/article/details/86513175

JAVA实现FTP文件上传下载

  • 首先在pom文件中添加FTP相关依赖jar坐标:

    		<dependency>
    			<groupId>commons-net</groupId>
    			<artifactId>commons-net</artifactId>
    			<version>3.3</version>
    		</dependency>
    
  • 创建FtpUtil工具类

    • 连接FTP,并获取FTPClient对象方法
     /**
         * 获取FTPClient对象
         *
         * @param ftpHost     FTP主机服务器
         * @param ftpPassword FTP 登录密码
         * @param ftpUserName FTP登录用户名
         * @param ftpPort     FTP端口 默认为21
         * @return
         */
        public FTPClient getFTPClient(String ftpHost, String ftpUserName,
                                             String ftpPassword, int ftpPort) {
            FTPClient ftpClient = new FTPClient();
            try {
                ftpClient = new FTPClient();
                ftpClient.connect(ftpHost, ftpPort);// 连接FTP服务器
                ftpClient.login(ftpUserName, ftpPassword);// 登陆FTP服务器
                if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
                    System.out.println("未连接到FTP,用户名或密码错误。");
                    ftpClient.disconnect();
                } else {
                    System.out.println("FTP连接成功。");
                }
            } catch (SocketException e) {
                e.printStackTrace();
                System.out.println("FTP的IP地址可能错误,请正确配置。");
            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("FTP的端口错误,请正确配置。");
            }
            return ftpClient;
        }
    
    • 向FTP服务器上传文件方法
    /**
         * Description: 向FTP服务器上传文件
         * @param ftpHost FTP服务器hostname
         * @param ftpUserName 账号
         * @param ftpPassword 密码
         * @param ftpPort 端口
         * @param ftpPath  FTP服务器中文件所在路径 格式: ftptest/aa
         * @param fileName ftp文件名称
         * @param input 文件流
         * @return 成功返回true,否则返回false
         */
        public  boolean uploadFile(String ftpHost, String ftpUserName,
                                         String ftpPassword, int ftpPort, String ftpPath,
                                         String fileName,InputStream input,FTPClient ftpClient) {
            boolean success = false;
            //FTPClient ftpClient = null;
            try {
                int reply;
                //ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort);
                reply = ftpClient.getReplyCode();
                if (!FTPReply.isPositiveCompletion(reply)) {
                    ftpClient.disconnect();
                    return success;
                }
                ftpClient.setControlEncoding("UTF-8"); // 中文支持
                ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
                ftpClient.enterLocalPassiveMode();
                ftpClient.changeWorkingDirectory(ftpPath);
    
                ftpClient.storeFile(fileName, input);
    
                input.close();
                ftpClient.logout();
                success = true;
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (ftpClient.isConnected()) {
                    try {
                        ftpClient.disconnect();
                    } catch (IOException ioe) {
                    }
                }
            }
            return success;
        }
    
    • 从FTP服务器下载文件方法
    /**
         * 从FTP服务器下载文件
         *
         * @param ftpHost FTP IP地址
         * @param ftpUserName FTP 用户名
         * @param ftpPassword FTP用户名密码
         * @param ftpPort FTP端口
         * @param ftpPath FTP服务器中文件所在路径 格式: ftptest/aa
         * @param localPath 下载到本地的位置 格式:H:/download
         * @param fileName 文件名称
         */
        public  void downloadFtpFile(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort, String ftpPath, String localPath, String fileName,FTPClient ftpClient) {
    
            //FTPClient ftpClient = null;
    
            try {
                ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort);
                ftpClient.setControlEncoding("UTF-8"); // 中文支持
                ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
                ftpClient.enterLocalPassiveMode();
                ftpClient.changeWorkingDirectory(ftpPath);
    
                File localFile = new File(localPath + File.separatorChar + fileName);
                OutputStream os = new FileOutputStream(localFile);
                ftpClient.retrieveFile(fileName, os);
                os.close();
                ftpClient.logout();
    
            } catch (FileNotFoundException e) {
                System.out.println("没有找到" + ftpPath + "文件");
                e.printStackTrace();
            } catch (SocketException e) {
                System.out.println("连接FTP失败.");
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("文件读取错误。");
                e.printStackTrace();
            }
    
        }
    
  • 测试类

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration("classpath:applicationContext.xml")
    public class Demo3 {
       String ftpHost = "192.168.29.1xx";
        String ftpUserName = "ccc";
        String ftpPassword = "root";
        int ftpPort = 21;
        String ftpPath = "test2/demo01.xlsx";
        String localPath = "D:\\test\\test.txt";
        String fileName = "demo01.txt";
    
        FtpUtil ftpUtil = new FtpUtil();
    
        FTPClient ftpClient = ftpUtil.getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort);
        @Test
        public  void test01(){
            //上传一个文件
            try{
                FileInputStream in=new FileInputStream(new File(localPath));
                boolean test = ftpUtil.uploadFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, fileName,in,ftpClient);
                if (test){
                    System.out.println("上传成功");
                }else{
                    System.out.println("上传失败");
                }
            } catch (FileNotFoundException e){
                e.printStackTrace();
                System.out.println(e);
            }
        }
    
        @Test
        public void test02(){
            //下载一个文件
            ftpUtil.downloadFtpFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, localPath, fileName,ftpClient);
        }
          public void test03(){
    		    //在FTP服务器上生成一个文件,并将一个字符串写入到该文件中
    	        try {
    	            InputStream input = new ByteArrayInputStream("test ftp jyf".getBytes("GBK"));
    	            boolean flag = ftpUtil.uploadFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, fileName,input,ftpClient);
    	            System.out.println(flag);
    	        } catch (UnsupportedEncodingException e) {
    	            e.printStackTrace();
       		 }
        }
    	
    

END

猜你喜欢

转载自blog.csdn.net/weixin_44018093/article/details/86513175
今日推荐