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

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

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

apache的commons-net包:

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

        <dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.6</version>
</dependency>

3、编写FTP工具类:

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

package com.yxjr.mytest;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream; import com.yxjr.common.utils.UUIDUtils;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply; /**
* FTP服务器工具类
*/
public class FTPUtils { /**
* 上传文件至FTP服务器
*
* @param url 服务器IP地址
* @param port 服务器端口
* @param userName 用户登录名
* @param password 用户登录密码
* @param storePath 服务器文件存储路径
* @param fileName 服务器文件存储名称
* @param is 文件输入流
* @return <b>true</b>:上传成功
* <br/>
* <b>false</b>:上传失败
*/
public static boolean storeFile(String url, int port, String userName, String password, String storePath, String fileName, InputStream is) {
boolean result = false;
FTPClient ftp = new FTPClient();
try {
// 连接至服务器,端口默认为21时,可直接通过URL连接
ftp.connect(url, port);
// 登录服务器
ftp.login(userName, password);
// 判断返回码是否合法
if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
// 不合法时断开连接
ftp.disconnect();
// 结束程序
return result;
}
// 判断ftp目录是否存在,如果不存在则创建目录,包括创建多级目录
String s = "/" + storePath;
String[] dirs = s.split("/");
ftp.changeWorkingDirectory("/");
//按顺序检查目录是否存在,不存在则创建目录
for (int i = 1; dirs != null && i < dirs.length; i++) {
if (!ftp.changeWorkingDirectory(dirs[i])) {
if (ftp.makeDirectory(dirs[i])) {
if (!ftp.changeWorkingDirectory(dirs[i])) {
return false;
}
} else {
return false;
}
}
}
// 设置文件操作目录
ftp.changeWorkingDirectory(storePath);
// 设置文件类型,二进制
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
// 设置缓冲区大小
ftp.setBufferSize(3072);
// 上传文件
result = ftp.storeFile(fileName, is);
// 关闭输入流
is.close();
// 登出服务器
ftp.logout();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
// 判断输入流是否存在
if (null != is) {
// 关闭输入流
is.close();
}
// 判断连接是否存在
if (ftp.isConnected()) {
// 断开连接
ftp.disconnect();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
} /**
* 从FTP服务器下载文件至本地
*
* @param url 服务器IP地址
* @param port 服务器端口
* @param userName 用户登录名
* @param password 用户登录密码
* @param remotePath 服务器文件存储路径
* @param fileName 服务器文件存储名称
* @param localPath 本地文件存储路径
* @return <b>true</b>:下载成功
* <br/>
* <b>false</b>:下载失败
*/
public static boolean retrieveFile(String url, int port, String userName, String password, String remotePath, String fileName, String localPath) {
boolean result = false;
FTPClient ftp = new FTPClient();
OutputStream os = null;
try {
// 连接至服务器,端口默认为21时,可直接通过URL连接
ftp.connect(url, port);
// 登录服务器
ftp.login(userName, password);
// 判断返回码是否合法
if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
// 不合法时断开连接
ftp.disconnect();
// 结束程序
return result;
}
// 设置文件操作目录
ftp.changeWorkingDirectory(remotePath);
// 设置文件类型,二进制
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
// 设置缓冲区大小
ftp.setBufferSize(3072);
// 设置字符编码
ftp.setControlEncoding("UTF-8");
// 构造本地文件对象
File localFile = new File(localPath + "/" + fileName);
// 获取文件操作目录下所有文件名称
String[] remoteNames = ftp.listNames();
// 循环比对文件名称,判断是否含有当前要下载的文件名
for (String remoteName : remoteNames) {
if (fileName.equals(remoteName)) {
result = true;
}
}
// 文件名称比对成功时,进入下载流程
if (result) {
// 构造文件输出流
os = new FileOutputStream(localFile);
// 下载文件
result = ftp.retrieveFile(fileName, os);
// 关闭输出流
os.close();
}
// 登出服务器
ftp.logout();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
// 判断输出流是否存在
if (null != os) {
// 关闭输出流
os.close();
}
// 判断连接是否存在
if (ftp.isConnected()) {
// 断开连接
ftp.disconnect();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
} /**
* 从FTP服务器删除文件
*
* @param url 服务器IP地址
* @param port 服务器端口
* @param userName 用户登录名
* @param password 用户登录密码
* @param remotePath 服务器文件存储路径
* @param fileName 服务器文件存储名称
* @return <b>true</b>:删除成功
* <br/>
* <b>false</b>:删除失败
*/
public static boolean deleteFile(String url, int port, String userName, String password, String remotePath, String fileName) {
boolean result = false;
FTPClient ftp = new FTPClient();
try {
// 连接至服务器,端口默认为21时,可直接通过URL连接
ftp.connect(url, port);
// 登录服务器
ftp.login(userName, password);
// 判断返回码是否合法
if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
// 不合法时断开连接
ftp.disconnect();
// 结束程序
return result;
}
// 设置文件操作目录
ftp.changeWorkingDirectory(remotePath);
// 设置文件类型,二进制
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
// 设置缓冲区大小
ftp.setBufferSize(3072);
// 设置字符编码
ftp.setControlEncoding("UTF-8");
// 获取文件操作目录下所有文件名称
String[] remoteNames = ftp.listNames();
// 循环比对文件名称,判断是否含有当前要下载的文件名
for (String remoteName : remoteNames) {
if (fileName.equals(remoteName)) {
result = true;
}
}
// 文件名称比对成功时,进入删除流程
if (result) {
// 删除文件
result = ftp.deleteFile(fileName);
}
// 登出服务器
ftp.logout();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
// 判断连接是否存在
if (ftp.isConnected()) {
// 断开连接
ftp.disconnect();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
} public static void main(String[] args) throws FileNotFoundException {
try {
FileInputStream fis = new FileInputStream(new File("C:\\Users\\Administrator\\Desktop\\太行后台socket发送工具1.txt"));
System.out.println(storeFile("10.8.66.22", 21, "admin", "1", "D:\\FTP\\test", UUIDUtils.randomUUID() + ".txt", fis)); // File file = new File("D:\\upload\\20191217070411_start.txt");
// InputStream is = new FileInputStream(file);
// System.out.println(storeFile("10.8.66.22", 21, "admin", "1", "D:\\FTP\\test", "2.txt", is));
// System.out.println(retrieveFile("10.8.66.22", 21, "admin", "1", "D:\\FTP\\test", "2.txt", "D:\\upload"));
// System.out.println(deleteFile("10.8.66.22", 21, "admin", "1", "D:\\FTP\\test", "2.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} } }

上面的工具类定义了三个方法,分别支持上传文件,下载文件,删除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. MySQL主从复制以及在本地环境搭建

    MySQL主从复制原理: master(主服务器),slave(从服务器) MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事binary log ...

  2. 如何解决Win10不能新建项目的问题?

    在Win10系统中,我们有时候会遇到右键菜单中没有新建项的情况,这时我们就无法进行文件的新建,非常耽误我们使用电脑.下面雨后清风就来分享一下Win10系统右键菜单没有新建项的解决方法. Win10系统 ...

  3. 【HICP Gauss】数据库 数据库管理(存储过程 函数 对象 近义词 触发器 事务类型)-9

    存储过程存储过程在大新数据库系统中,一组为了完成特定功能的SQL语句集 存储在SQL数据库中 优势: SQL进行封装 调用方便             存储过程会进行编译 提升用户执行SQL语句集的速 ...

  4. 利用setuptools发布Python程序到PyPI,为Python添砖加瓦

    pip install的东西从哪里来的? 从PyPI (Python Package Index)来的,官网是:  https://pypi.python.org/pypi/执行pip install ...

  5. FreeRTOS编程风格

    数据类型 基本使用的是标准C里面的数据类型,但是针对不同的处理器,对标准C的数据类型又进行了重定义: 在FreeRTOS中详细的数据类型重定义在portmacro.h这个文件中,具体如下: /* Ty ...

  6. vs看源代码

    资源地址:https://www.cnblogs.com/HouZhiHouJueBlogs/p/4274197.html 资源地址:http://referencesource.microsoft. ...

  7. python 学习笔记_1 pip安装、卸载、更新包相关操作及数据类型学习

    '''prepare_1 pip安装.卸载.更新组件type 各数据类型''' py -3 -m pip py -3 -m pip listpy -3 -m pip show nosepy -3 -m ...

  8. css超链接

    超链接的代码<a href="http://www.divcss5.com/" target="_blank" title="关于div css ...

  9. WCF Endpoint分类

    WCF中可以为一个Service配置多个Endpoint 这些Endpoint的分类方法有下面3中 1.全局就一个endpoint,一个接口公开所有的方法,这适合简单的业务场景 2.将endpoint ...

  10. [唐胡璐]Java操作Sql Server 2008数据库

    下载Microsoft JDBC Driver for SQL Server 直接去官网下载即可: 下载解压文件,得到sqljdbc.jar和sqljdbc4.jar。如果你使用的是jre1.7版本, ...