java上传文件到FTP服务器

简介: java上传文件到FTP服务器

欢迎来到小生的博客,各种工具类,常用知识点、技巧持续更新中。。。。。。。
感谢大家点赞关注,希望大家能够给小生更多的支持。
祝您阅读愉快!
有任何疑问可以加小生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;
  }
}


目录
相关文章
|
1月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
68 9
|
1天前
|
安全 编译器 Linux
深入解析与防范:基于缓冲区溢出的FTP服务器攻击及调用计算器示例
本文深入解析了利用缓冲区溢出漏洞对FTP服务器进行远程攻击的技术,通过分析FreeFlow FTP 1.75版本的漏洞,展示了如何通过构造过长的用户名触发缓冲区溢出并调用计算器(`calc.exe`)。文章详细介绍了攻击原理、关键代码组件及其实现步骤,并提出了有效的防范措施,如输入验证、编译器保护和安全编程语言的选择,以保障系统的安全性。环境搭建基于Windows XP SP3和Kali Linux,使用Metasploit Framework进行攻击演示。请注意,此内容仅用于教育和研究目的。
18 4
|
2月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
66 1
|
2月前
|
分布式计算 资源调度 Hadoop
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
88 4
|
2月前
|
Java Shell Maven
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
128 4
|
2月前
|
网络协议 文件存储 Windows
Windows Server 2019 FTP服务器搭建
Windows Server 2019 FTP服务器搭建
|
2月前
|
安全 网络协议 网络安全
Windows Server 2003 FTP服务器搭建
Windows Server 2003 FTP服务器搭建
|
2月前
|
弹性计算 关系型数据库 网络安全
阿里云国际版无法连接和访问Windows服务器中的FTP服务
阿里云国际版无法连接和访问Windows服务器中的FTP服务
|
6天前
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
36 6
下一篇
DataWorks