JAVA技术实现上传下载文件到FTP服务器(完整)
作者:mrr 时间:2023-08-26 15:35:43
具体详细介绍请看下文:
在使用文件进行交互数据的应用来说,使用FTP服务器是一个很好的选择。本文使用Apache Jakarta Commons Net(commons-net-3.3.jar) 基于FileZilla Server服务器实现FTP服务器上文件的上传/下载/删除等操作。
关于FileZilla Server服务器的详细搭建配置过程,详情请见 FileZilla Server安装配置教程 。之前有朋友说,上传大文件(几百M以上的文件)到FTP服务器时会重现无法重命名的问题,但本人亲测上传2G的文件到FileZilla Server都没有该问题,朋友们可以放心使用该代码。
FavFTPUtil.Java
package com.favccxx.favsoft.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
public class FavFTPUtil {
/**
* 上传文件(可供Action/Controller层使用)
* @param hostname FTP服务器地址
* @param port FTP服务器端口号
* @param username FTP登录帐号
* @param password FTP登录密码
* @param pathname FTP服务器保存目录
* @param fileName 上传到FTP服务器后的文件名称
* @param inputStream 输入文件流
* @return
*/
public static boolean uploadFile(String hostname, int port, String username, String password, String pathname, String fileName, InputStream inputStream){
boolean flag = false;
FTPClient ftpClient = new FTPClient();
ftpClient.setControlEncoding("UTF-8");
try {
//连接FTP服务器
ftpClient.connect(hostname, port);
//登录FTP服务器
ftpClient.login(username, password);
//是否成功登录FTP服务器
int replyCode = ftpClient.getReplyCode();
if(!FTPReply.isPositiveCompletion(replyCode)){
return flag;
}
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.makeDirectory(pathname);
ftpClient.changeWorkingDirectory(pathname);
ftpClient.storeFile(fileName, inputStream);
inputStream.close();
ftpClient.logout();
flag = true;
} catch (Exception e) {
e.printStackTrace();
} finally{
if(ftpClient.isConnected()){
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return flag;
}
/**
* 上传文件(可对文件进行重命名)
* @param hostname FTP服务器地址
* @param port FTP服务器端口号
* @param username FTP登录帐号
* @param password FTP登录密码
* @param pathname FTP服务器保存目录
* @param filename 上传到FTP服务器后的文件名称
* @param originfilename 待上传文件的名称(绝对地址)
* @return
*/
public static boolean uploadFileFromProduction(String hostname, int port, String username, String password, String pathname, String filename, String originfilename){
boolean flag = false;
try {
InputStream inputStream = new FileInputStream(new File(originfilename));
flag = uploadFile(hostname, port, username, password, pathname, filename, inputStream);
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}
/**
* 上传文件(不可以进行文件的重命名操作)
* @param hostname FTP服务器地址
* @param port FTP服务器端口号
* @param username FTP登录帐号
* @param password FTP登录密码
* @param pathname FTP服务器保存目录
* @param originfilename 待上传文件的名称(绝对地址)
* @return
*/
public static boolean uploadFileFromProduction(String hostname, int port, String username, String password, String pathname, String originfilename){
boolean flag = false;
try {
String fileName = new File(originfilename).getName();
InputStream inputStream = new FileInputStream(new File(originfilename));
flag = uploadFile(hostname, port, username, password, pathname, fileName, inputStream);
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}
/**
* 删除文件
* @param hostname FTP服务器地址
* @param port FTP服务器端口号
* @param username FTP登录帐号
* @param password FTP登录密码
* @param pathname FTP服务器保存目录
* @param filename 要删除的文件名称
* @return
*/
public static boolean deleteFile(String hostname, int port, String username, String password, String pathname, String filename){
boolean flag = false;
FTPClient ftpClient = new FTPClient();
try {
//连接FTP服务器
ftpClient.connect(hostname, port);
//登录FTP服务器
ftpClient.login(username, password);
//验证FTP服务器是否登录成功
int replyCode = ftpClient.getReplyCode();
if(!FTPReply.isPositiveCompletion(replyCode)){
return flag;
}
//切换FTP目录
ftpClient.changeWorkingDirectory(pathname);
ftpClient.dele(filename);
ftpClient.logout();
flag = true;
} catch (Exception e) {
e.printStackTrace();
} finally{
if(ftpClient.isConnected()){
try {
ftpClient.logout();
} catch (IOException e) {
}
}
}
return flag;
}
/**
* 下载文件
* @param hostname FTP服务器地址
* @param port FTP服务器端口号
* @param username FTP登录帐号
* @param password FTP登录密码
* @param pathname FTP服务器文件目录
* @param filename 文件名称
* @param localpath 下载后的文件路径
* @return
*/
public static boolean downloadFile(String hostname, int port, String username, String password, String pathname, String filename, String localpath){
boolean flag = false;
FTPClient ftpClient = new FTPClient();
try {
//连接FTP服务器
ftpClient.connect(hostname, port);
//登录FTP服务器
ftpClient.login(username, password);
//验证FTP服务器是否登录成功
int replyCode = ftpClient.getReplyCode();
if(!FTPReply.isPositiveCompletion(replyCode)){
return flag;
}
//切换FTP目录
ftpClient.changeWorkingDirectory(pathname);
FTPFile[] ftpFiles = ftpClient.listFiles();
for(FTPFile file : ftpFiles){
if(filename.equalsIgnoreCase(file.getName())){
File localFile = new File(localpath + "/" + file.getName());
OutputStream os = new FileOutputStream(localFile);
ftpClient.retrieveFile(file.getName(), os);
os.close();
}
}
ftpClient.logout();
flag = true;
} catch (Exception e) {
e.printStackTrace();
} finally{
if(ftpClient.isConnected()){
try {
ftpClient.logout();
} catch (IOException e) {
}
}
}
return flag;
}
}
FavFTPUtilTest.java
package com.favccxx.favsoft.util;
import junit.framework.TestCase;
public class FavFTPTest extends TestCase {
public void testFavFTPUtil(){
String hostname = "127.0.0.1";
int port = 21;
String username = "business";
String password = "business";
String pathname = "business/ebook";
String filename = "big.rar";
String originfilename = "C:\\Users\\Downloads\\Downloads.rar";
FavFTPUtil.uploadFileFromProduction(hostname, port, username, password, pathname, filename, originfilename);
// String localpath = "D:/";
// FavFTPUtil.downloadFile(hostname, port, username, password, pathname, filename, localpath);
}
}
标签:上传,下载,FTP
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java基于JDBC实现事务,银行转账及货物进出库功能示例
2022-03-24 07:06:34
![](https://img.aspxhome.com/file/2023/4/60764_0s.png)
Kotlin协程与并发深入全面讲解
2022-09-11 12:28:25
![](https://img.aspxhome.com/file/2023/6/127216_0s.png)
Java 调整格式日志输出
2021-10-05 23:09:14
![](https://img.aspxhome.com/file/2023/7/77957_0s.png)
详解springboot springsecuroty中的注销和权限控制问题
2023-04-05 15:09:51
![](https://img.aspxhome.com/file/2023/6/92536_0s.png)
Android中判断网络是否可用的代码分享
2022-01-03 23:59:46
JAVA设计模式之责任链模式详解
2023-10-28 21:54:47
![](https://img.aspxhome.com/file/2023/1/108461_0s.png)
解决RestTemplate加@Autowired注入不了的问题
2022-07-14 03:00:48
![](https://img.aspxhome.com/file/2023/0/96830_0s.png)
Android使用AutoCompleteTextView实现自动填充功能的案例
2023-03-26 06:56:47
![](https://img.aspxhome.com/file/2023/3/139193_0s.png)
Java字符串编码知识点详解介绍
2023-10-16 09:41:04
Springboot整合Dozer实现深度复制的方法
2023-11-12 17:18:11
Java Spring的核心与设计思想你知道吗
2021-08-30 11:18:03
![](https://img.aspxhome.com/file/2023/0/66070_0s.png)
浅谈JavaWeb中的web.xml配置部署描述符文件
2023-11-12 00:14:13
java如何去除图片中的白色背景
2022-04-17 00:07:14
![](https://img.aspxhome.com/file/2023/8/113508_0s.jpg)
Mybatis之#{}与${}的区别使用详解
2023-03-24 01:55:21
详解如何在Android studio中更新sdk版本和build-tools版本
2023-11-18 04:36:15
![](https://img.aspxhome.com/file/2023/1/91031_0s.png)
SpringBoot中使用Redis Stream实现消息监听示例
2021-09-02 04:42:07
![](https://img.aspxhome.com/file/2023/3/75423_0s.jpg)
详解Java8与Runtime.getRuntime().availableProcessors()
2023-01-04 18:17:06
C语言函数超详细讲解上篇
2022-05-23 06:29:31
![](https://img.aspxhome.com/file/2023/3/117773_0s.png)
Eclipse IDE可支持Java 14編程
2022-09-06 10:14:43
![](https://img.aspxhome.com/file/2023/1/82451_0s.png)
深入解析Java中ThreadLocal线程类的作用和用法
2022-01-12 09:03:15