欢迎来到小生的博客,各种工具类,常用知识点、技巧持续更新中。。。。。。。
感谢大家点赞关注,希望大家能够给小生更多的支持。
祝您阅读愉快!
有任何疑问可以加小生QQ群咨询:107680366

前段时间,项目中使用到了上传文件到FTP服务器,再此略作整理,形成一个util工具,方便日后使用。
项目代码已上传至github:https://github.com/hack-feng/ftpdemo.git
点击直接前往

其中部分生成规则可以根据实际业务进行修改,删除

首先定义一个FTP服务器和上传文件的基础信息
封装一个FtpBean.java实体类

public class FtpBean {/*** 部分信息如果传空的话,默认赋值,根据业务需求修改*///FTP服务器地址private String address;//FTP服务器端口号private String port;//FTP服务器用户名private String username;//FTP服务器密码private String password;//上传文件名称private String fileName;//基本路径private String basepath;//文件输入流private InputStream inputStream;//保存文件方式  默认:1-覆盖;2-文件名称后面+(递增数据) private Integer saveFileType;//省略get,set方法,详情可查询github上的源码

创建FTP上传工具类 FtpUtil.java:

public class FtpUtil {public static boolean uploadFile(FtpBean ftpBean) {boolean result = false;FTPClient ftp = new FTPClient();try {int reply;ftp.connect(ftpBean.getAddress(), Integer.valueOf(ftpBean.getPort()));// 连接FTP服务器// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器ftp.login(ftpBean.getUsername(), ftpBean.getPassword());// 登录reply = ftp.getReplyCode();if (!FTPReply.isPositiveCompletion(reply)) {ftp.disconnect();return result;}String tempPath = ftpBean.getBasepath();String fileName = ftpBean.getFileName();if (!ftp.changeWorkingDirectory(ftpBean.getBasepath())) {//判断目录是否存在,如果目录不存在创建目录,目录存在则跳转到此目录下String []tempPathList = tempPath.split("/");for (String dir : tempPathList) {if(dir != null && dir != ""){if (!ftp.changeWorkingDirectory(dir)) {if (!ftp.makeDirectory(dir)) {return result;} else {ftp.changeWorkingDirectory(dir);}}}}}//保存文件方式  默认:1-覆盖;2-文件名称后面+(递增数据) if(ftpBean.getSaveFileType() == 2){FTPFile[]file = ftp.listFiles();Integer i = 1;//采用递归,文件名重复自动加(i)fileName = aaa(file, i, fileName, fileName);}//设置上传文件的类型为二进制类型ftp.setFileType(FTP.BINARY_FILE_TYPE);//设置模式很重要ftp.enterLocalActiveMode();//上传文件result = ftp.storeFile(fileName, ftpBean.getInputStream());if(!result){return result;}ftpBean.getInputStream().close();ftp.logout();result = true;} catch (IOException e) {e.printStackTrace();} finally {if (ftp.isConnected()) {try {ftp.disconnect();} catch (IOException ioe) {}}}return result;}//递归重命名去重复public static String aaa(FTPFile[] file, int i, String fileName, String nameFlag){boolean isOk = true;for (FTPFile file2 : file) {String flag = file2.getName();if(nameFlag.equals(flag)){String []fileNames = fileName.split("\\.");if(fileNames.length > 0){nameFlag = "";}for (int j = 0; j < fileNames.length; j++) {if(j == fileNames.length-1){nameFlag = nameFlag+"("+i+")."+fileNames[j];}else if(j == fileNames.length-2){nameFlag = nameFlag + fileNames[j];}else{nameFlag = nameFlag + fileNames[j] + ".";}}i += 1;isOk = false;}else{isOk = true;}}if(isOk == false){nameFlag = aaa(file, i, fileName, nameFlag);}return nameFlag;}
}

生成上传路径规则工具类 GenerateDirUtil.java:

public class GenerateDirUtil {public static enum Type{DEFAULT,FILETYPE}/***  <p>*  type为DEFAULT或者type为null时:获取原文件所在路径,直接在FTP创建此路径保存*  type为FILETYPE时:则根据文件类型创建目录*  </p>*  @method_Name    : fileDirectory*  @author         : Maple*  @creation       : 2019年3月15日 下午1:59:31 *  @param file*  @return*/public static String fileDirectory(File file, Type type){if(Type.FILETYPE.equals(type)){String resDir = "/";resDir = new MimetypesFileTypeMap().getContentType(file);resDir.replace('\\', '/');return "/"+resDir;}else{String resDir = "/";resDir = file.getParent();return resDir;}}
}

创建测试用例FtpDemo.java:

public class FtpDemo {public static void main(String[] args){//获取本地需要上传的文件,此处只用作测试File file = new File("D:\\test\\ftp.txt");if(file.isFile() && file.exists()){//设置FTP上传的基本信息,可直接初始化数据FtpBean ftp = new FtpBean();//自动生成路径,默认取源文件路径,为FILETYPE时,取文件类型做路径//如使用自己的路径,直接ftp.setBasepath赋值即可String basepath = GenerateDirUtil.fileDirectory(file, GenerateDirUtil.Type.FILETYPE);ftp.setBasepath(basepath);/*** 文件名生成方式* 1、自己命名            ftp.setBasepath("aaaa.txt");* 2、取文件原名字        ftp.setBasepath(file.getName());* 3、根据时间戳自动生成   */SimpleDateFormat sdfms = new SimpleDateFormat("yyyyMMddHHmmssSSS");String date = sdfms.format(System.currentTimeMillis());//添加三位自动生成的数字,防止重复int i=(int)(Math.random()*900)+100; String fileName = date + i +".txt";ftp.setFileName(fileName);//测试命名重复递增fileName = "aaa.txt";try{//将文件转换成一个输入流InputStream in = new FileInputStream(file);ftp.setInputStream(in);//传入文件名称,和文件输入流,上传至FTP服务器boolean isOk = FtpUtil.uploadFile(ftp);if(isOk){System.out.println("文件上传成功");}else{System.out.println("文件上传失败");}in.close();}catch(Exception e){e.printStackTrace();}}else{System.out.println("文件不存在");}}
}

待上传的文件截图:

上传至FTP服务器后的截图,分别用按时间戳命名和固定不重复命名两种方法实现:

java上传文件到FTP服务器相关推荐

  1. Java 上传文件到ftp服务器

    前两篇文章我们搭建了一个ftp服务器,并对服务器进行了相应的配置,这篇文章我们来说一下我们如何上传文件. 先介绍一下项目,本项目采用的是spring mvc +spring +mybatis ,用ma ...

  2. java上传文件到远程服务器(一)---HttpURLConnection方式

    我们在之前的文章 JavaWeb静态资源分离思路 中已经了解到要把文件上传到静态资源服务器有三种方式: java上传文件到ftp服务器(这个方案需要在静态资源服务器安装ftp服务) java使用Htt ...

  3. Java基于FTPClient上传文件到FTP服务器

    1.上传文件到FTP服务器,用FTPClient类,引入commons-net-3.1.jar包 2.参考代码: //上传ftppublic static boolean uploadFile(Str ...

  4. vba上传文件到ftp服务器指定目录下面

    vba上传文件到ftp服务器指定目录 +脚本形式 文章目录 1. 测试版本无校验: 2. 测试版本有检验 3. 文件不存在校验版本 4. 文件不存在校验+必填项校验版本 1. 测试版本无校验: Sub ...

  5. java上传文件到服务器,java上传文件到云服务器

    java上传文件到云服务器 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ.exe.在本地主机和Windows云服务器上分别安装 ...

  6. 简单php web ftp服务器,php 上传文件到ftp服务器的简单示例(单文件)

    搜索热词 PHP上传单个文件到ftp服务器的演示范例,感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编来看看吧. 经测试代码如下: /** * 上传文件到ftp服务器 * * @param ...

  7. JAVA上传文件图片到服务器保存

    这里我记录一个比较简单方便操作的JAVA上传文件图片到服务器并且保存! 首先是页面 html的   我这是提交一个文件和类型 <div style="border: 1px solid ...

  8. 文件无法上传到ftp服务器,无法上传文件到FTP服务器使用C++

    我有这个简单的代码上传文件到服务器,但它似乎不工作,不上传任何文件(FtpPutFile返回0).我正在使用FileZilla服务器,这是我的代码和FileZilla所说的:无法上传文件到FTP服务器 ...

  9. web上传文件到ftp服务器,web 上传文件到ftp服务器上

    web 上传文件到ftp服务器上 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ.exe.在本地主机和Windows云服务器上分 ...

最新文章

  1. JVM怎么判断对象是否存活
  2. 面试必考-从URL输入到页面展现到底发生了什么
  3. 我写了一个java实体类,implements了Serializable接口,然后我如何让serialversionUID自动生成...
  4. matlab中x从0到5不含0,关于MATLAB的数学建模算法学习笔记
  5. 如何在Timeline中创建自定义轨道?
  6. 强大的日志分析工具AWStats经典备忘
  7. oracle structure,oracle memory structure
  8. WinZip 11 汉化注册版
  9. LeetCode 661. Image Smoother
  10. X3D代码理解之demo(cfg)
  11. HTML+PHP搭建一个生物数据增删查改网站
  12. 小程序开发之组件video(视频)
  13. 基于Problem Solving with Algorithms and Data Structures using Python的学习记录(4)——Recursion
  14. MySQL数据库:注释及数据类型
  15. php中seq是什么意思,seq-answer
  16. linux 查看本地防火墙设置,Linux防火墙设置命令的几种方法
  17. 在vuecli3怎么提升构建打包速度?
  18. 马云“退休”前,给我们留下的10句人生真言
  19. 在c语言中i10是什么意思啊,跪求!!!高手们帮忙
  20. 守护进程与后台进程(Python 创建守护进程)

热门文章

  1. oracle左外连接语法,Oracle 左外连接、右外连接、全外连接小总结
  2. MVC的全名是Model View Controll
  3. 三步解决微信小程序cdn加速(资源大小超过200k)
  4. 北京工作三年程序员,2018年4~5月面试经历
  5. 全网为数不多清晰可行的在VUE中使用sortable.js实现动态拖拽排序的教程!
  6. copy法制作图片木马
  7. wordcloud 用法及名著词云统计
  8. MacBook Pro 方向左键不能用 和MacBook Pro的一些常用修复
  9. 某大厂面试官问:你会Git工具?我怂了!
  10. TMS320C6657GPIO相关函数理解