ftp工具类

上次因为涉及到协议下载包的原因,将sftp服务器变更为ftp之后,我发现原本写的sftp连不上ftp。所以,就把sftp的工具类果断换成了ftp的工具类。下面我就直接贴代码,不废话了。

一:连接ftp服务器

/**
 * 获取FTPClient对象
 *
 * @param ftpHost     FTP主机服务器
 * @param ftpPassword FTP 登录密码
 * @param ftpUserName FTP登录用户名
 * @param ftpPort     FTP端口 默认为21
 * @return
 */
public static FTPClient getFTPClient(String ftpHost, int ftpPort, String ftpUserName,
                                     String ftpPassword) {
    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服务器下载文件
   *
   * @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 static void downloadFtpFile(String ftpHost, String ftpUserName,
                                   String ftpPassword, int ftpPort, String ftpPath, String localPath,
                                   String fileName) {

    FTPClient ftpClient = null;

    try {
        ftpClient = getFTPClient(ftpHost,ftpPort, ftpUserName, ftpPassword);
        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();
    }

}
/**
 * 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 static boolean uploadFile(String ftpHost, String ftpUserName,
                                 String ftpPassword, int ftpPort, String ftpPath,
                                 String fileName,InputStream input) {
    boolean success = false;
    FTPClient ftpClient = null;
    try {
        int reply;
        ftpClient = getFTPClient(ftpHost,ftpPort, ftpUserName, ftpPassword);
        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文件
public static boolean deleteFile(String pathname, String filename,String ftpHost,int ftpPort,String ftpUserName,String ftpPassword) {
    boolean flag = false;
    FTPClient ftpClient = null;
    try {
        ftpClient = getFTPClient(ftpHost,ftpPort, ftpUserName, ftpPassword);
        System.out.println("开始删除文件");
        //切换FTP目录
        ftpClient.changeWorkingDirectory(pathname);
        ftpClient.dele(filename);
        ftpClient.logout();
        flag = true;
        System.out.println("删除文件成功");
    } catch (Exception e) {
        System.out.println("删除文件失败");
        e.printStackTrace();
    } finally {
        if (ftpClient.isConnected()) {
            try {
                ftpClient.disconnect();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return flag;
}
/**
 * 断开与远程服务器的连接
 */
public static void closeClient(FTPClient ftpClient) {
    if (ftpClient != null && ftpClient.isConnected()) {
        try {
            ftpClient.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值