zoukankan      html  css  js  c++  java
  • Java 从FTP下载.上传文件

    1.需要导入pom

    <dependency>
      <groupId>commons-net</groupId>
       <artifactId>commons-net</artifactId>
       <version>3.1</version>
    </dependency>

    2.FTP工具类(Ftp IP 端口 用户名 密码都配置在配置文件)

    package com.tools.ftp;
    
    import org.apache.commons.net.ftp.FTP;
    import org.apache.commons.net.ftp.FTPClient;
    import org.apache.commons.net.ftp.FTPReply;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    import java.io.*;
    import java.net.SocketException;
    
    /**
     * @author admin
     * @title: FtpUtils
     * @projectName tools
     * @description: FTP工具类
     * @date 2020/3/1913:23
     */
    @Component
    public class FtpUtils {
    
        /**FTP IP*/
        @Value("${ftp.host}")
        private String ftpHost;
        /**FTP用户名*/
        @Value("${ftp.userName}")
        private String ftpUserName;
        /**FTP密码*/
        @Value("${ftp.password}")
        private String ftpPassword;
        /**FTP 端口 默认21*/
        @Value("${ftp.port}")
        private int ftpPort =21;
    
        public static final String CHARSET_GBK = "GBK";
    
        public static final String CHARSET_UTF8 = "UTF-8";
    
        public static final String CHARSET_ISO = "iso-8859-1";
    
        /**
         * 获取FTPClient
         * @return
         */
        public  FTPClient getFTPClient() {
            FTPClient ftpClient = new FTPClient();
            try {
                ftpClient = new FTPClient();
                // 连接FTP服务器
                ftpClient.connect(ftpHost, ftpPort);
                // 登陆FTP服务器
                ftpClient.login(ftpUserName, ftpPassword);
                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;
        }
    
        /**
         * 下载文件
         * @param ftpPath  ftp文件存放物理路径
         * @param fileName 文件路径
         */
        public  void downloadFile(String ftpPath, String localPath, String fileName) {
            FTPClient ftpClient = null;
            try {
                ftpClient = getFTPClient();
                // 中文支持
                ftpClient.setControlEncoding(CHARSET_UTF8);
                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();
            }
        }
    
        /**
         * 上传文件
         * @param ftpPath  ftp文件存放物理路径
         * @param fileName 文件路径
         * @param input 文件输入流,即从本地服务器读取文件的IO输入流
         */
        public  void uploadFile(String ftpPath,String fileName,InputStream input){
            FTPClient ftp=null;
            try {
                ftp=getFTPClient();
                ftp.changeWorkingDirectory(ftpPath);
                ftp.setFileType(FTP.BINARY_FILE_TYPE);
                fileName=new String(fileName.getBytes(CHARSET_GBK),CHARSET_ISO);
                ftp.storeFile(fileName, input);
                input.close();
                ftp.logout();
                System.out.println("upload succes!");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    
        public String getFtpHost() {
            return ftpHost;
        }
    
        public void setFtpHost(String ftpHost) {
            this.ftpHost = ftpHost;
        }
    
        public String getFtpUserName() {
            return ftpUserName;
        }
    
        public void setFtpUserName(String ftpUserName) {
            this.ftpUserName = ftpUserName;
        }
    
        public String getFtpPassword() {
            return ftpPassword;
        }
    
        public void setFtpPassword(String ftpPassword) {
            this.ftpPassword = ftpPassword;
        }
    
        public int getFtpPort() {
            return ftpPort;
        }
    
        public void setFtpPort(int ftpPort) {
            this.ftpPort = ftpPort;
        }
    }
  • 相关阅读:
    常用的居中方法
    CSS实现盒子高度撑开且以最高的为高
    利用vertical-align实现行内元素对齐
    CSS实现模糊效果
    【LeetCode 37】解数独
    【LeetCode 36】有效的数独
    【LeetCode 35】搜索插入位置
    【LeetCode 34】在排序数组中查找元素的第一个和最后一个位置
    【LeetCode 33】搜索旋转排序数组
    【LeetCode 32】最长有效括号
  • 原文地址:https://www.cnblogs.com/qinxu/p/12523974.html
Copyright © 2011-2022 走看看