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 Linux
java读取linux服务器下某文档的内容
java读取linux服务器下某文档的内容
35 3
java读取linux服务器下某文档的内容
|
1月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
34 1
|
1月前
SecureCRT 通过xftp命令行上传文件到服务器上
SecureCRT 通过xftp命令行上传文件到服务器上
99 1
|
1月前
|
分布式计算 资源调度 Hadoop
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
72 4
|
1月前
|
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
96 4
|
前端开发 Java Linux
Java服务器宕机解决方法论(上)
Java服务器宕机解决方法论(上)
744 0
Java服务器宕机解决方法论(上)
|
Java 调度
Java服务器宕机解决方法论(下)
Java服务器宕机解决方法论(下)
369 0
|
7天前
|
安全 Java 测试技术
Java并行流陷阱:为什么指定线程池可能是个坏主意
本文探讨了Java并行流的使用陷阱,尤其是指定线程池的问题。文章分析了并行流的设计思想,指出了指定线程池的弊端,并提供了使用CompletableFuture等替代方案。同时,介绍了Parallel Collector库在处理阻塞任务时的优势和特点。
|
3天前
|
安全 Java 开发者
深入解读JAVA多线程:wait()、notify()、notifyAll()的奥秘
在Java多线程编程中,`wait()`、`notify()`和`notifyAll()`方法是实现线程间通信和同步的关键机制。这些方法定义在`java.lang.Object`类中,每个Java对象都可以作为线程间通信的媒介。本文将详细解析这三个方法的使用方法和最佳实践,帮助开发者更高效地进行多线程编程。 示例代码展示了如何在同步方法中使用这些方法,确保线程安全和高效的通信。
17 9
|
6天前
|
存储 安全 Java
Java多线程编程的艺术:从基础到实践####
本文深入探讨了Java多线程编程的核心概念、应用场景及其实现方式,旨在帮助开发者理解并掌握多线程编程的基本技能。文章首先概述了多线程的重要性和常见挑战,随后详细介绍了Java中创建和管理线程的两种主要方式:继承Thread类与实现Runnable接口。通过实例代码,本文展示了如何正确启动、运行及同步线程,以及如何处理线程间的通信与协作问题。最后,文章总结了多线程编程的最佳实践,为读者在实际项目中应用多线程技术提供了宝贵的参考。 ####