广告位联系
返回顶部
分享到

Java使用FTP上传文件并模拟接受的教程

java 来源:转载 作者:秩名 发布时间:2021-02-12 00:09:07 人浏览
摘要

0. 导入相关依赖 !-- FTP --dependency groupIdcommons-net/groupId artifactIdcommons-net/artifactId version3.6/version /dependency !-- Hutool:一个小而全的Java工具类库,具体介绍参照附录1 -- dependency groupIdcn.hutool/groupId artifactIdhutool-a

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");


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://blog.csdn.net/weixin_45884459/article/details/113742777
相关文章
  • SpringBoot自定义错误处理逻辑介绍

    SpringBoot自定义错误处理逻辑介绍
    1. 自定义错误页面 将自定义错误页面放在 templates 的 error 文件夹下,SpringBoot 精确匹配错误信息,使用 4xx.html 或者 5xx.html 页面可以打印错误
  • Java实现手写一个线程池的代码

    Java实现手写一个线程池的代码
    线程池技术想必大家都不陌生把,相信在平时的工作中没有少用,而且这也是面试频率非常高的一个知识点,那么大家知道它的实现原理和
  • Java实现断点续传功能的代码

    Java实现断点续传功能的代码
    题目实现:网络资源的断点续传功能。 二、解题思路 获取要下载的资源网址 显示网络资源的大小 上次读取到的字节位置以及未读取的字节
  • 你可知HashMap为什么是线程不安全的
    HashMap 的线程不安全 HashMap 的线程不安全主要体现在下面两个方面 在 jdk 1.7 中,当并发执行扩容操作时会造成环形链和数据丢失的情况 在
  • ArrayList的动态扩容机制的介绍

    ArrayList的动态扩容机制的介绍
    对于 ArrayList 的动态扩容机制想必大家都听说过,之前的文章中也谈到过,不过由于时间久远,早已忘却。 所以利用这篇文章做做笔记,加
  • JVM基础之字节码的增强技术介绍

    JVM基础之字节码的增强技术介绍
    字节码增强技术 在上文中,着重介绍了字节码的结构,这为我们了解字节码增强技术的实现打下了基础。字节码增强技术就是一类对现有字
  • Java中的字节码增强技术

    Java中的字节码增强技术
    1.字节码增强技术 字节码增强技术就是一类对现有字节码进行修改或者动态生成全新字节码文件的技术。 参考地址 2.常见技术 技术分类 类
  • Redis BloomFilter布隆过滤器原理与实现

    Redis BloomFilter布隆过滤器原理与实现
    Bloom Filter 概念 布隆过滤器(英语:Bloom Filter)是1970年由一个叫布隆的小伙子提出的。它实际上是一个很长的二进制向量和一系列随机映射
  • Java C++算法题解leetcode801使序列递增的最小交换次

    Java C++算法题解leetcode801使序列递增的最小交换次
    题目要求 思路:状态机DP 实现一:状态机 Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 class Solution { public int minSwap(int[] nums1, int[] nums2) { int n
  • Mybatis结果集映射与生命周期介绍

    Mybatis结果集映射与生命周期介绍
    一、ResultMap结果集映射 1、设计思想 对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了 2、resultMap的应用场
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计