【Java/FTP】使用apache.commons的FTPClient往FTP服务器上传下载文件
【FTPClient的依赖】
<dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.6</version> </dependency>
【代码】
package com.hy.lab.ftp; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; public class FtpUtil { /** * 上传文件到FTP服务器 * @param hostname * @param port * @param username * @param password * @param locaFilename * @param remoteFilename 若只指定文件名,文件将传到用户的缺省目录 * @return * @throws Exception */ public static boolean uploadFileToServer(String hostname,int port,String username,String password,String locaFilename,String remoteFilename) throws Exception{ FTPClient ftpClient = new FTPClient(); ftpClient.setControlEncoding("UTF-8"); ftpClient.connect(hostname,port); ftpClient.login(username, password); int replyCode = ftpClient.getReplyCode(); ftpClient.setDataTimeout(120000); ftpClient.setFileType(FTP.BINARY_FILE_TYPE);//设置为二进制文件 if (!FTPReply.isPositiveCompletion(replyCode)) { ftpClient.disconnect(); System.out.println("FTP连接失败"); return false; }else { System.out.println("FTP连接成功"); } // 本地文件流 InputStream in = new FileInputStream(locaFilename); // 服务器上文件 String fileOnServer = new String(remoteFilename.getBytes("UTF-8"),"iso-8859-1"); // 正式上传 ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); boolean result=ftpClient.storeFile(fileOnServer, in); String msg=String.format("文件%s上传%s",remoteFilename,result?"成功":"失败"); System.out.println(msg); //关闭文件流 in.close(); //关闭连接 if (ftpClient != null) { ftpClient.logout(); ftpClient.disconnect(); } return result; } /** * 从服务器下载文件 * @param hostname * @param port * @param username * @param password * @param locaFilename * @param remoteFilename * @return * @throws Exception */ public static boolean downloadFromServer(String hostname,int port,String username,String password,String locaFilename,String remoteFilename) throws Exception{ FTPClient ftpClient = new FTPClient(); ftpClient.setControlEncoding("UTF-8"); ftpClient.connect(hostname,port); ftpClient.login(username, password); int replyCode = ftpClient.getReplyCode(); ftpClient.setDataTimeout(120000); ftpClient.setFileType(FTP.BINARY_FILE_TYPE);//设置为二进制文件 if (!FTPReply.isPositiveCompletion(replyCode)) { ftpClient.disconnect(); System.out.println("FTP连接失败"); return true; }else { System.out.println("FTP连接成功"); } File file=new File(locaFilename); FileOutputStream fos=new FileOutputStream(file); boolean result = ftpClient.retrieveFile(remoteFilename,fos); String msg=String.format("文件%s下载%s",locaFilename,result?"成功":"失败"); System.out.println(msg); //关闭文件流 fos.close(); //关闭连接 if (ftpClient != null) { ftpClient.logout(); ftpClient.disconnect(); } return result; } public static void main(String[] args) throws Exception{ uploadFileToServer("192.168.111.128",21,"hy","123456","c:\\temp\\local.csv","remote.csv"); downloadFromServer("192.168.111.128",21,"hy","123456","c:\\temp\\local.csv","remote.csv"); } }
【参考资料】
https://blog.csdn.net/fengsheng5210/article/details/78141122
END
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2020-03-21 [bash] 打印到屏幕相关语法
2020-03-21 String.format与搭配转化符的使用
2020-03-21 与C中printf并列的System.out.printf 用法(转载)
2020-03-21 求用户登录流水表中的用户连续登录天数和起止时间
2019-03-21 【Canvas与化学】钙元素图标