1、在目标服务器上搭建FTP服务器

搭建方式有多种大家可以自行选择,例如使用Serv-U或者FTPServer.exe;这里我以FTPServer.exe为例搭建;在目标服务器(这里对应的IP是10.8.66.22)上运行FTPServer.exe并按照下图设置:

2、项目确保导入相应jar包:

apache的commons-net包:

maven项目导入下面的依赖即可:

  1. <dependency>
  2. <groupId>org.apache.commons</groupId>
  3. <artifactId>commons-lang3</artifactId>
  4. <version>3.6</version>
  5. </dependency>

3、编写FTP工具类:

新建类名为FTPUtils的class,并将下面所有的代码黏贴进去:

  1. package com.yxjr.mytest;
  2.  
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8. import java.io.InputStream;
  9. import java.io.OutputStream;
  10.  
  11. import com.yxjr.common.utils.UUIDUtils;
  12. import org.apache.commons.net.ftp.FTPClient;
  13. import org.apache.commons.net.ftp.FTPFile;
  14. import org.apache.commons.net.ftp.FTPReply;
  15.  
  16. /**
  17. * FTP服务器工具类
  18. */
  19. public class FTPUtils {
  20.  
  21. /**
  22. * 上传文件至FTP服务器
  23. *
  24. * @param url 服务器IP地址
  25. * @param port 服务器端口
  26. * @param userName 用户登录名
  27. * @param password 用户登录密码
  28. * @param storePath 服务器文件存储路径
  29. * @param fileName 服务器文件存储名称
  30. * @param is 文件输入流
  31. * @return <b>true</b>:上传成功
  32. * <br/>
  33. * <b>false</b>:上传失败
  34. */
  35. public static boolean storeFile(String url, int port, String userName, String password, String storePath, String fileName, InputStream is) {
  36. boolean result = false;
  37. FTPClient ftp = new FTPClient();
  38. try {
  39. // 连接至服务器,端口默认为21时,可直接通过URL连接
  40. ftp.connect(url, port);
  41. // 登录服务器
  42. ftp.login(userName, password);
  43. // 判断返回码是否合法
  44. if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
  45. // 不合法时断开连接
  46. ftp.disconnect();
  47. // 结束程序
  48. return result;
  49. }
  50. // 判断ftp目录是否存在,如果不存在则创建目录,包括创建多级目录
  51. String s = "/" + storePath;
  52. String[] dirs = s.split("/");
  53. ftp.changeWorkingDirectory("/");
  54. //按顺序检查目录是否存在,不存在则创建目录
  55. for (int i = 1; dirs != null && i < dirs.length; i++) {
  56. if (!ftp.changeWorkingDirectory(dirs[i])) {
  57. if (ftp.makeDirectory(dirs[i])) {
  58. if (!ftp.changeWorkingDirectory(dirs[i])) {
  59. return false;
  60. }
  61. } else {
  62. return false;
  63. }
  64. }
  65. }
  66. // 设置文件操作目录
  67. ftp.changeWorkingDirectory(storePath);
  68. // 设置文件类型,二进制
  69. ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
  70. // 设置缓冲区大小
  71. ftp.setBufferSize(3072);
  72. // 上传文件
  73. result = ftp.storeFile(fileName, is);
  74. // 关闭输入流
  75. is.close();
  76. // 登出服务器
  77. ftp.logout();
  78. } catch (IOException e) {
  79. e.printStackTrace();
  80. } finally {
  81. try {
  82. // 判断输入流是否存在
  83. if (null != is) {
  84. // 关闭输入流
  85. is.close();
  86. }
  87. // 判断连接是否存在
  88. if (ftp.isConnected()) {
  89. // 断开连接
  90. ftp.disconnect();
  91. }
  92. } catch (IOException e) {
  93. e.printStackTrace();
  94. }
  95. }
  96. return result;
  97. }
  98.  
  99. /**
  100. * 从FTP服务器下载文件至本地
  101. *
  102. * @param url 服务器IP地址
  103. * @param port 服务器端口
  104. * @param userName 用户登录名
  105. * @param password 用户登录密码
  106. * @param remotePath 服务器文件存储路径
  107. * @param fileName 服务器文件存储名称
  108. * @param localPath 本地文件存储路径
  109. * @return <b>true</b>:下载成功
  110. * <br/>
  111. * <b>false</b>:下载失败
  112. */
  113. public static boolean retrieveFile(String url, int port, String userName, String password, String remotePath, String fileName, String localPath) {
  114. boolean result = false;
  115. FTPClient ftp = new FTPClient();
  116. OutputStream os = null;
  117. try {
  118. // 连接至服务器,端口默认为21时,可直接通过URL连接
  119. ftp.connect(url, port);
  120. // 登录服务器
  121. ftp.login(userName, password);
  122. // 判断返回码是否合法
  123. if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
  124. // 不合法时断开连接
  125. ftp.disconnect();
  126. // 结束程序
  127. return result;
  128. }
  129. // 设置文件操作目录
  130. ftp.changeWorkingDirectory(remotePath);
  131. // 设置文件类型,二进制
  132. ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
  133. // 设置缓冲区大小
  134. ftp.setBufferSize(3072);
  135. // 设置字符编码
  136. ftp.setControlEncoding("UTF-8");
  137. // 构造本地文件对象
  138. File localFile = new File(localPath + "/" + fileName);
  139. // 获取文件操作目录下所有文件名称
  140. String[] remoteNames = ftp.listNames();
  141. // 循环比对文件名称,判断是否含有当前要下载的文件名
  142. for (String remoteName : remoteNames) {
  143. if (fileName.equals(remoteName)) {
  144. result = true;
  145. }
  146. }
  147. // 文件名称比对成功时,进入下载流程
  148. if (result) {
  149. // 构造文件输出流
  150. os = new FileOutputStream(localFile);
  151. // 下载文件
  152. result = ftp.retrieveFile(fileName, os);
  153. // 关闭输出流
  154. os.close();
  155. }
  156. // 登出服务器
  157. ftp.logout();
  158. } catch (IOException e) {
  159. e.printStackTrace();
  160. } finally {
  161. try {
  162. // 判断输出流是否存在
  163. if (null != os) {
  164. // 关闭输出流
  165. os.close();
  166. }
  167. // 判断连接是否存在
  168. if (ftp.isConnected()) {
  169. // 断开连接
  170. ftp.disconnect();
  171. }
  172. } catch (IOException e) {
  173. e.printStackTrace();
  174. }
  175. }
  176. return result;
  177. }
  178.  
  179. /**
  180. * 从FTP服务器删除文件
  181. *
  182. * @param url 服务器IP地址
  183. * @param port 服务器端口
  184. * @param userName 用户登录名
  185. * @param password 用户登录密码
  186. * @param remotePath 服务器文件存储路径
  187. * @param fileName 服务器文件存储名称
  188. * @return <b>true</b>:删除成功
  189. * <br/>
  190. * <b>false</b>:删除失败
  191. */
  192. public static boolean deleteFile(String url, int port, String userName, String password, String remotePath, String fileName) {
  193. boolean result = false;
  194. FTPClient ftp = new FTPClient();
  195. try {
  196. // 连接至服务器,端口默认为21时,可直接通过URL连接
  197. ftp.connect(url, port);
  198. // 登录服务器
  199. ftp.login(userName, password);
  200. // 判断返回码是否合法
  201. if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
  202. // 不合法时断开连接
  203. ftp.disconnect();
  204. // 结束程序
  205. return result;
  206. }
  207. // 设置文件操作目录
  208. ftp.changeWorkingDirectory(remotePath);
  209. // 设置文件类型,二进制
  210. ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
  211. // 设置缓冲区大小
  212. ftp.setBufferSize(3072);
  213. // 设置字符编码
  214. ftp.setControlEncoding("UTF-8");
  215. // 获取文件操作目录下所有文件名称
  216. String[] remoteNames = ftp.listNames();
  217. // 循环比对文件名称,判断是否含有当前要下载的文件名
  218. for (String remoteName : remoteNames) {
  219. if (fileName.equals(remoteName)) {
  220. result = true;
  221. }
  222. }
  223. // 文件名称比对成功时,进入删除流程
  224. if (result) {
  225. // 删除文件
  226. result = ftp.deleteFile(fileName);
  227. }
  228. // 登出服务器
  229. ftp.logout();
  230. } catch (IOException e) {
  231. e.printStackTrace();
  232. } finally {
  233. try {
  234. // 判断连接是否存在
  235. if (ftp.isConnected()) {
  236. // 断开连接
  237. ftp.disconnect();
  238. }
  239. } catch (IOException e) {
  240. e.printStackTrace();
  241. }
  242. }
  243. return result;
  244. }
  245.  
  246. public static void main(String[] args) throws FileNotFoundException {
  247. try {
  248. FileInputStream fis = new FileInputStream(new File("C:\\Users\\Administrator\\Desktop\\太行后台socket发送工具1.txt"));
  249. System.out.println(storeFile("10.8.66.22", 21, "admin", "1", "D:\\FTP\\test", UUIDUtils.randomUUID() + ".txt", fis));
  250.  
  251. // File file = new File("D:\\upload\\20191217070411_start.txt");
  252. // InputStream is = new FileInputStream(file);
  253. // System.out.println(storeFile("10.8.66.22", 21, "admin", "1", "D:\\FTP\\test", "2.txt", is));
  254. // System.out.println(retrieveFile("10.8.66.22", 21, "admin", "1", "D:\\FTP\\test", "2.txt", "D:\\upload"));
  255. // System.out.println(deleteFile("10.8.66.22", 21, "admin", "1", "D:\\FTP\\test", "2.txt"));
  256. } catch (FileNotFoundException e) {
  257. e.printStackTrace();
  258. }
  259.  
  260. }
  261.  
  262. }

上面的工具类定义了三个方法,分别支持上传文件,下载文件,删除FTP服务器上的文件,可根据需求自行调用;

JAVA通过FTP方式向远程服务器或者客户端上传、下载文件,以及删除FTP服务器上的文件的更多相关文章

  1. 高可用的Spring FTP上传下载工具类(已解决上传过程常见问题)

    前言 最近在项目中需要和ftp服务器进行交互,在网上找了一下关于ftp上传下载的工具类,大致有两种. 第一种是单例模式的类. 第二种是另外定义一个Service,直接通过Service来实现ftp的上 ...

  2. MVC图片上传、浏览、删除 ASP.NET MVC之文件上传【一】(八) ASP.NET MVC 图片上传到服务器

    MVC图片上传.浏览.删除   1.存储配置信息 在web.config中,添加配置信息节点 <appSettings> <add key="UploadPath" ...

  3. Linux shell:FTP(文件传输协议)上传下载命令

    SecureCRT通过ftp将nmon上传,建立一个目录,用命令上传文件.[命令见下面] 或通过UE.SSH上传/下载,使用sftp建立链接. [通过cmd进入ftp服务器]先假设有一FTP服务器,F ...

  4. 【FTP】使用org.apache.commons.net.ftp.FTPClient 实现FTP的上传下载

    在此之前,在项目中加上FTP的架包 第一步:配置FTP服务器的相关配置 FtpConfig.java  实体类(配置类) package com.sxd.ftp; public class FtpCo ...

  5. C# -- FTP上传下载

    C# -- FTP上传下载 1. C#实现FTP下载 private static void TestFtpDownloadFile(string strFtpPath, string strFile ...

  6. Java使用SFTP和FTP两种连接方式实现对服务器的上传下载 【我改】

    []如何区分是需要使用SFTP还是FTP? []我觉得: 1.看是否已知私钥. SFTP 和 FTP 最主要的区别就是 SFTP 有私钥,也就是在创建连接对象时,SFTP 除了用户名和密码外还需要知道 ...

  7. JAVA 实现FTP上传下载(sun.net.ftp.FtpClient)

    package com.why.ftp; import java.io.DataInputStream; import java.io.File; import java.io.FileInputSt ...

  8. Java实现FTP批量大文件上传下载篇1

    本文介绍了在Java中,如何使用Java现有的可用的库来编写FTP客户端代码,并开发成Applet控件,做成基于Web的批量.大文件的上传下载控件.文章在比较了一系列FTP客户库的基础上,就其中一个比 ...

  9. Java.ftp上传下载

    1:jar的maven的引用: 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht ...

随机推荐

  1. 十年阿里顶级架构师教你怎么使用Java来搭建微服务

    微服务背后的大理念是将大型.复杂且历时长久的应用在架构上设计为内聚的服务,这些服务能够随着时间的流逝而演化.本文主要介绍了利用 Java 生态系统构建微服务的多种方法,并分析了每种方法的利弊. 快速预 ...

  2. 【Day4】5.Request对象之Http Post请求案例分析

    import urllib.parse as up import urllib.request as ur import json word = input('请输入要翻译的中文') data = { ...

  3. 深度学习之卷积神经网络CNN及tensorflow代码实例

    深度学习之卷积神经网络CNN及tensorflow代码实例 什么是卷积? 卷积的定义 从数学上讲,卷积就是一种运算,是我们学习高等数学之后,新接触的一种运算,因为涉及到积分.级数,所以看起来觉得很复杂 ...

  4. 01 Windows编程——Hello World

    源码 #include "stdafx.h" #include<Windows.h> int WINAPI WinMain(HINSTANCE hInst,HINSTA ...

  5. (14)占位符%和format

    # 在介绍占位符之前,这里先介绍下索引,索引可以方便的帮我们拿到容器内的数据 # 索引可以简单的理解为一个有序的标记,我们把容器里的元素每一个都编上一个编号 # 凡是有序的容器类型数据,都可以通过索引 ...

  6. PrintWriter返回乱码的分析及解决

    用response得到输出流,即response.getOuptStream(); 返回值为ServletOutputStream 对象,即JSP的out对象,要么用response得到输出对象Pri ...

  7. jade继承

    代码的复用是jade非常突出的一个设计目标,jade不仅仅通过mixin来复用代码,他在文件的组织能力上也非常突出,说白了,就是继承和包涵   block定义的方式和调用的方式 block desc ...

  8. 标准库类型之map

    使用map得包含map类所在的头文件#include <map> 定义一个map对象:map<string, int> mapTest;//用string作为索引,存储int对 ...

  9. Lua 学习之基础篇二<Lua 数据类型以及函数库 汇总>

    引言 前面讲了运算符,这里主要对Lua的数据处理相关的数据类型和函数库进行总结归纳,后面会再接着单独分开讲解具体使用. 首先因为Lua 是动态类型语言,变量不要类型定义,只需要为变量赋值. 值可以存储 ...

  10. Task.Run 和 Task.Factory.StartNew 区别

    Task.Run 是在 dotnet framework 4.5 之后才可以使用, Task.Factory.StartNew 可以使用比 Task.Run 更多的参数,可以做到更多的定制. 可以认为 ...