java 向ftp上传下载文件实例

最近需要用Java向ftp上传下载些东西,特此封装了工具类。可以拿来直接用。


import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.Logger;

import java.io.IOException;
import java.io.InputStream;


public class ftpUtil {

    private static Logger log = Logger.getLogger(ftpUtil.class);

    /**
     * @param ftpHost     ftp ip
     * @param ftpUserName 用户名
     * @param ftpPassword 密码
     * @param ftpPort     端口
     * @return org.apache.commons.net.ftp.FTPClient
     * @description   获取ftpclient对象
     * @date 2018/8/19 16:54
     */
    public static FTPClient getFTPClient(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort) {
        FTPClient ftpClient = null;
        ftpClient = new FTPClient();
        try {
            ftpClient.connect(ftpHost, ftpPort);//连接ftp服务器
            ftpClient.login(ftpUserName, ftpPassword);//登录ftp服务器
            if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {//ftpClient.getReplyCode()状态码在200到300间 判定登录成功
                log.info("未连接到ftp,用户名或密码错误");
                ftpClient.disconnect();
            } else {
                log.info("ftp连接成功");
            }
        } catch (IOException e) {
            log.error("连接ftp服务器出错:", e);
        }
        return ftpClient;
    }

    /**
     * @param ftpHost     ftp ip
     * @param ftpPort     端口
     * @param ftpUserName 用户名
     * @param ftpPassword 密码
     * @param ftpPath     路径
     * @param fileName    文件名
     * @param input       输入流
     * @return boolean 成功返回true  失败 false
     * @description  上传文件到ftp指定目录
     * @date 2018/8/19 17:14
     */
    public static boolean uploadFile(String ftpHost, int ftpPort, String ftpUserName, String ftpPassword, String ftpPath, String fileName, InputStream input) {
          boolean flag=true;
        try {
            FTPClient ftpClient = null;
            ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort);
            ftpClient.setControlEncoding("UTF-8");//中文支持
            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
            ftpClient.enterLocalPassiveMode();
            boolean cdflag=ftpClient.changeWorkingDirectory(ftpPath);
            log.info("路径切换是否成功:"+cdflag);
            //上传文件到指定目录
            boolean uploadFlag=ftpClient.storeFile(new String(fileName.getBytes(),"UTF-8"),input);
            log.info("文件是否上传成功:"+uploadFlag);
            input.close();
            //退出ftp
            ftpClient.logout();
            flag=true;
        } catch (IOException e) {
            flag=false;
        }
        return flag;
    }
   /**
    * @author zl
    * @description 从ftp下载指定路径下的文件
    * @date 2018/8/19 17:38
    * @param host
    * @param port
    * @param username
    * @param password
    * @param remotePath 路径
    * @param fileName 文件名
    * @return java.io.InputStream
    */
    public static InputStream downFile(String host, int port, String username,
                                       String password, String remotePath, String fileName) {
        FTPClient ftp = new FTPClient();
        InputStream is = null;
        try {
            int reply;
            try {
                ftp.connect(host, port);// 连接FTP服务器
            } catch (Exception e) {
                log.error("ftp连接失败:",e);
            }
            try {
                ftp.login(username, password);// 登录
            } catch (Exception e) {
                log.error("ftp登录失败:",e);
            }
            if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
                ftp.disconnect();
                log.info("未正确连接ftp");
                return null;
            }
            ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录
            FTPFile[] fs = ftp.listFiles();
            Boolean isFind = true;
            for (FTPFile ff : fs) {
                if (ff.getName().equals(fileName)) {
                    isFind = false;
                    is = ftp.retrieveFileStream(ff.getName());
                }
            }
            if (isFind) {
                log.info("文件未找到");
            }
            ftp.logout();
        } catch (IOException e) {
            log.info("文件下载失败");
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                }
            }
        }
        return is;
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值