Java使用FTP上传文件并模拟接受的方法
0. 导入相关依赖
<!-- FTP --> <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.6</version> </dependency> <!-- Hutool:一个小而全的Java工具类库,具体介绍参照附录1 --> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.3.7</version> </dependency> <!-- lombok:通过简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 Java 代码的工具,需要为idea添加插件,添加方法参照附录2 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.16</version> </dependency>
1. 文件上传代码
@Component @Slf4j public class FTPTools { /** * 文件上传 * @param hostname 域名地址 * @param port 端口号 * @param username 用户名 * @param password 密码 * @param fileInfo 待上传的文件 * @param uploadPath 待上传到的路径 * @param saveName 预保存的文件名 * @return */ public static boolean upload(String hostname,int port,String username,String password,String fileInfo,String uploadPath,String saveName){ boolean flag = false; FTPClient ftpClient = null; try { ftpClient = new FTPClient(); ftpClient.connect(hostname,port); //每次数据连接之前,ftp client告诉ftp server开通一个端口来传输数据 ftpClient.enterLocalPassiveMode(); //设置二进制传输 ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); ftpClient.setControlEncoding("UTF-8"); if(ftpClient.login(username,password)){//若连接成功 log.info("成功登录到ftp服务端,开始文件上传"); flag = sendFile(ftpClient,fileInfo,uploadPath,saveName); }else{ log.error("登录到ftp服务端失败,请检查用户名和密码"); } disconnect(ftpClient); }catch (SocketException e) { log.error("文件{}上传失败:{}",saveName,e.getMessage()); } catch (IOException e) { log.error("文件{}上传失败:{}",saveName,e.getMessage()); } finally { } return flag; } /** * 文件传输 * @param fileInfo * @param uploadPath * @param saveName * @return */ private static boolean sendFile(FTPClient ftpClient, String fileInfo, String uploadPath, String saveName) throws FileNotFoundException,IOException{ boolean flag = false; try(FileInputStream fileInputStream = new FileInputStream(fileInfo)){ //检查工作目录是否存在 if(ftpClient.changeWorkingDirectory(uploadPath)){ if(ftpClient.listFiles(saveName).length != 0){ //检查文件是否已经存在 boolean deleteFlag = ftpClient.deleteFile(saveName); log.info(deleteFlag?"文件已存在,直接删除":"存在同名文件且无法删除,请检查权限"); } flag = ftpClient.storeFile(saveName,fileInputStream); log.info(flag?"文件上传成功!":"文件上传失败!"); }else{ log.error("找不到要上传的目录"); } }catch (FileNotFoundException e){ log.error("找不到要上传的文件{}:{}",fileInfo,e.getMessage()); throw e; }catch (IOException e){ log.error("文件传输异常:{}",e.getMessage()); throw e; } return flag; } /** * 断开ftp连接 * @param ftpClient */ private static void disconnect(FTPClient ftpClient) { if (ftpClient.isConnected()){ try{ ftpClient.disconnect(); log.info("ftp连接已关闭,文件上传结束"); }catch (IOException e){ log.error("ftp连接关闭失败:{}",e); } } } }
2. FTP模拟测试环境搭建
通过FileZilla安装模拟环境:
a. 打开FileZilla的下载中心,下载服务器
b. 选择合适的版本后,直接傻瓜式安装
c. 配置相关数据
相关操作流程如下:
编辑—>用户
用户名和密码粗略设置如下图所示
通过FTP上传到的文件位置可按个人情况进行设置,勾选相关权限
以上配置即可满足测试要求,进一步的东西大家可根据需求自行研究,也欢迎留言交流!
3. 测试代码
//ftp配置信息 String hostname = "127.0.0.1"; //域名地址 int port = 21; //端口号 String username = "lmh"; //用户名 String password = "123456"; //密码 String fileInfo = "E:\\Temporary\\1.file"; //待上传的文件目录 String uploadPath = "/"; //待上传到的路径 String saveName = FTP+ "_" + DateUtil.format(new Date(),"yyyyMMdd"); //预保存的文件名 FTPTools.upload(hostname, port, username, password, fileInfo, uploadPath, saveName);
4. 测试效果
附录1 :Hutool
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。
Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;
Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。
就比如
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); String date = sdf.format(new Date());
可以通过Hutool简化为
String date = DateUtil.format(new Date(),"yyyyMMdd");
类似的例子很多大家可以自己去官网看,文档清晰明了:https://www.hutool.cn/docs/#/
附录2:IntelliJ IDEA lombok插件的安装和使用
到此这篇关于Java使用FTP上传文件并模拟接受的方法的文章就介绍到这了,更多相关Java FTP上传文件内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!
相关文章
- 这篇文章主要介绍了如何利用java语言实现经典《复杂迷宫》游戏,文中采用了swing技术进行了界面化处理,感兴趣的小伙伴可以动手试一试...2022-02-01
java 运行报错has been compiled by a more recent version of the Java Runtime
java 运行报错has been compiled by a more recent version of the Java Runtime (class file version 54.0)...2021-04-01- 这篇文章主要介绍了在java中获取List集合中最大的日期时间操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
- 这篇文章主要介绍了教你怎么用Java获取国家法定节假日,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下...2021-04-23
- 这篇文章主要介绍了Java如何发起http请求的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-31
- 说起C#和Java这两门语言(语法,数据类型 等),个人以为,大概有90%以上的相似,甚至可以认为几乎一样。但是在工作中,我也发现了一些细微的差别...2020-06-25
php无刷新利用iframe实现页面无刷新上传文件(1/2)
利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25- 这篇文章主要介绍了解决Java处理HTTP请求超时的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-29
- 这篇文章主要介绍了java 判断两个时间段是否重叠的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
- 这篇文章主要介绍了超简洁java实现双色球若干注随机号码生成(实例代码),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-02
java 画pdf用itext调整表格宽度、自定义各个列宽的方法
这篇文章主要介绍了java 画pdf用itext调整表格宽度、自定义各个列宽的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-31- 这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
- 分享给大家php判断上传文件类型的方法,大家一起学习学习。/** * 读取文件前几个字节 判断文件类型 * @return String */ function checkTitle($filename){ $file=fopen($filename, "rb"); $bin=fread($file, 2); /...2015-10-21
- 这篇文章主要介绍了java正则表达式判断前端参数修改表中另一个字段的值,需要的朋友可以参考下...2021-05-07
Java使用ScriptEngine动态执行代码(附Java几种动态执行代码比较)
这篇文章主要介绍了Java使用ScriptEngine动态执行代码,并且分享Java几种动态执行代码比较,需要的朋友可以参考下...2021-04-15- 这篇文章主要介绍了Java开发实现人机猜拳游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-08-03
- 这篇文章主要介绍了Java List集合返回值去掉中括号('[ ]')的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-29
Java中lombok的@Builder注解的解析与简单使用详解
这篇文章主要介绍了Java中lombok的@Builder注解的解析与简单使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-01-06- 下面小编就为大家带来一篇java中String类型变量的赋值问题介绍。小编觉得挺不错的。现在分享给大家,给大家一个参考。...2016-03-28
Java 8 Stream 的终极技巧——Collectors 功能与操作方法详解
这篇文章主要介绍了Java 8 Stream Collectors 功能与操作方法,结合实例形式详细分析了Java 8 Stream Collectors 功能、操作方法及相关注意事项,需要的朋友可以参考下...2020-05-20