详解JAVA中使用FTPClient工具类上传下载
发布时间 - 2026-01-11 02:36:56 点击率:次详解JAVA中使用FTPClient工具类上传下载

在Java程序中,经常需要和FTP打交道,比如向FTP服务器上传文件、下载文件。本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件。
1、写一个javabean文件,描述ftp上传或下载的信息
实例代码:
public class FtpUseBean {
private String host;
private Integer port;
private String userName;
private String password;
private String ftpSeperator;
private String ftpPath="";
private int repeatTime = 0;//连接ftp服务器的次数
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public Integer getPort() {
return port;
}
public void setPort(Integer port) {
this.port = port;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public void setFtpSeperator(String ftpSeperator) {
this.ftpSeperator = ftpSeperator;
}
public String getFtpSeperator() {
return ftpSeperator;
}
public void setFtpPath(String ftpPath) {
if(ftpPath!=null)
this.ftpPath = ftpPath;
}
public String getFtpPath() {
return ftpPath;
}
public void setRepeatTime(int repeatTime) {
if (repeatTime > 0)
this.repeatTime = repeatTime;
}
public int getRepeatTime() {
return repeatTime;
}
/**
* take an example:<br>
* ftp://userName:password@ip:port/ftpPath/
* @return
*/
public String getFTPURL() {
StringBuffer buf = new StringBuffer();
buf.append("ftp://");
buf.append(getUserName());
buf.append(":");
buf.append(getPassword());
buf.append("@");
buf.append(getHost());
buf.append(":");
buf.append(getPort());
buf.append("/");
buf.append(getFtpPath());
return buf.toString();
}
}
2、导入包commons-net-1.4.1.jar
package com.util;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.SocketException;
import java.net.URL;
import java.net.URLConnection;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import com.bean.FtpUseBean;
public class FtpUtil extends FTPClient {
private static Log log = LogFactory.getLog(FtpUtil.class);
private FtpUseBean ftpUseBean;
//获取目标路径下的文件属性信息,主要是获取文件的size
private FTPFile[] files;
public FtpUseBean getFtpUseBean() {
return ftpUseBean;
}
public FtpUtil(){
super();
}
public void setFtpUseBean(FtpUseBean ftpUseBean) {
this.ftpUseBean = ftpUseBean;
}
public boolean ftpLogin() {
boolean isLogined = false;
try {
log.debug("ftp login start ...");
int repeatTime = ftpUseBean.getRepeatTime();
for (int i = 0; i < repeatTime; i++) {
super.connect(ftpUseBean.getHost(), ftpUseBean.getPort());
isLogined = super.login(ftpUseBean.getUserName(), ftpUseBean.getPassword());
if (isLogined)
break;
}
if(isLogined)
log.debug("ftp login successfully ...");
else
log.debug("ftp login failed ...");
return isLogined;
} catch (SocketException e) {
log.error("", e);
return false;
} catch (IOException e) {
log.error("", e);
return false;
} catch (RuntimeException e) {
log.error("", e);
return false;
}
}
public void setFtpToUtf8() throws IOException {
FTPClientConfig conf = new FTPClientConfig();
super.configure(conf);
super.setFileType(FTP.IMAGE_FILE_TYPE);
int reply = super.sendCommand("OPTS UTF8 ON");
if (reply == 200) { // UTF8 Command
super.setControlEncoding("UTF-8");
}
}
public void close() {
if (super.isConnected()) {
try {
super.logout();
super.disconnect();
log.debug("ftp logout ....");
} catch (Exception e) {
log.error(e.getMessage());
throw new RuntimeException(e.toString());
}
}
}
public void uploadFileToFtpByIS(InputStream inputStream, String fileName) throws IOException {
super.storeFile(ftpUseBean.getFtpPath()+fileName, inputStream);
}
public File downFtpFile(String fileName, String localFileName) throws IOException {
File outfile = new File(localFileName);
OutputStream oStream = null;
try {
oStream = new FileOutputStream(outfile);
super.retrieveFile(ftpUseBean.getFtpPath()+fileName, oStream);
return outfile;
} finally {
if (oStream != null)
oStream.close();
}
}
public FTPFile[] listFtpFiles() throws IOException {
return super.listFiles(ftpUseBean.getFtpPath());
}
public void deleteFtpFiles(FTPFile[] ftpFiles) throws IOException {
String path = ftpUseBean.getFtpPath();
for (FTPFile ff : ftpFiles) {
if (ff.isFile()) {
if (!super.deleteFile(path + ff.getName()))
throw new RuntimeException("delete File" + ff.getName() + " is n't seccess");
}
}
}
public void deleteFtpFile(String fileName) throws IOException {
if (!super.deleteFile(ftpUseBean.getFtpPath() +fileName))
throw new RuntimeException("delete File" + ftpUseBean.getFtpPath() +fileName + " is n't seccess");
}
public InputStream downFtpFile(String fileName) throws IOException {
return super.retrieveFileStream(ftpUseBean.getFtpPath()+fileName);
}
/**
*
* @return
* @return StringBuffer
* @description 下载ftp服务器上的文件,addr为带用户名和密码的URL
*/
public StringBuffer downloadBufferByURL(String addr) {
BufferedReader in = null;
try {
URL url = new URL(addr);
URLConnection conn = url.openConnection();
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
StringBuffer ret = new StringBuffer();
while ((line = in.readLine()) != null)
ret.append(line);
return ret;
} catch (Exception e) {
log.error(e);
return null;
} finally {
try {
if (null != in)
in.close();
} catch (IOException e) {
e.printStackTrace();
log.error(e);
}
}
}
/**
*
* @return
* @return byte[]
* @description 下载ftp服务器上的文件,addr为带用户名和密码的URL
*/
public byte[] downloadByteByURL(String addr) {
FTPClient ftp = null;
try {
URL url = new URL(addr);
int port = url.getPort()!=-1?url.getPort():21;
log.info("HOST:"+url.getHost());
log.info("Port:"+port);
log.info("USERINFO:"+url.getUserInfo());
log.info("PATH:"+url.getPath());
ftp = new FTPClient();
ftp.setDataTimeout(30000);
ftp.setDefaultTimeout(30000);
ftp.setReaderThread(false);
ftp.connect(url.getHost(), port);
ftp.login(url.getUserInfo().split(":")[0], url.getUserInfo().split(":")[1]);
FTPClientConfig conf = new FTPClientConfig("UNIX");
ftp.configure(conf);
log.info(ftp.getReplyString());
ftp.enterLocalPassiveMode(); //ftp.enterRemotePassiveMode()
ftp.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
int reply = ftp.sendCommand("OPTS UTF8 ON");// try to
log.debug("alter to utf-8 encoding - reply:" + reply);
if (reply == 200) { // UTF8 Command
ftp.setControlEncoding("UTF-8");
}
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
log.info(ftp.getReplyString());
ByteArrayOutputStream out=new ByteArrayOutputStream();
DataOutputStream o=new DataOutputStream(out);
String remotePath = url.getPath();
/**
* Fixed:if doen't remove the first "/" at the head of url,
* the file can't be retrieved.
*/
if(remotePath.indexOf("/")==0) {
remotePath = url.getPath().replaceFirst("/", "");
}
ftp.retrieveFile(remotePath, o);
byte[] ret = out.toByteArray();
o.close();
String filepath = url.getPath();
ftp.changeWorkingDirectory(filepath.substring(0,filepath.lastIndexOf("/")));
files = ftp.listFiles();
return ret;
} catch (Exception ex) {
log.error("Failed to download file from ["+addr+"]!"+ex);
} finally {
try {
if (null!=ftp)
ftp.disconnect();
} catch (Exception e) {
//
}
}
return null;
// StringBuffer buffer = downloadBufferByURL(addr);
// return null == buffer ? null : buffer.toString().getBytes();
}
public FTPFile[] getFiles() {
return files;
}
public void setFiles(FTPFile[] files) {
this.files = files;
}
// public static void getftpfilesize(String addr){
//
// FTPClient ftp = null;
//
// try {
//
// URL url = new URL(addr);
//
// int port = url.getPort()!=-1?url.getPort():21;
// log.info("HOST:"+url.getHost());
// log.info("Port:"+port);
// log.info("USERINFO:"+url.getUserInfo());
// log.info("PATH:"+url.getPath());
//
// ftp = new FTPClient();
//
// ftp.setDataTimeout(30000);
// ftp.setDefaultTimeout(30000);
// ftp.setReaderThread(false);
// ftp.connect(url.getHost(), port);
// ftp.login(url.getUserInfo().split(":")[0], url.getUserInfo().split(":")[1]);
// FTPClientConfig conf = new FTPClientConfig("UNIX");
// ftp.configure(conf);
// log.info(ftp.getReplyString());
//
// ftp.enterLocalPassiveMode(); //ftp.enterRemotePassiveMode()
// ftp.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
//
// int reply = ftp.sendCommand("OPTS UTF8 ON");// try to
//
// log.debug("alter to utf-8 encoding - reply:" + reply);
// if (reply == 200) { // UTF8 Command
// ftp.setControlEncoding("UTF-8");
// }
// ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
// ftp.changeWorkingDirectory(url.getPath());
// FTPFile[] files = ftp.listFiles();
// for (FTPFile flie : files){
// System.out.println(new String(flie.getName().getBytes("gbk"),"ISO8859-1"));
// System.out.println(flie.getSize());
// }
//
//
// } catch (Exception ex) {
// log.error("Failed to download file from ["+addr+"]!"+ex);
// } finally {
// try {<pre class="java" name="code"> if (null!=ftp)
// ftp.disconnect();
// } catch (Exception e) {
}
}
}
}
以上就是JAVA FTPClient工具类的上传和下载的实例详解,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# JAVA
# FTPClient
# FTPClient实例详解
# FTPClient使用方法
# JAVA中使用FTPClient实现文件上传下载实例代码
# JAVA技术实现上传下载文件到FTP服务器(完整)
# Java通过FTP服务器上传下载文件的方法
# Java实现ftp上传下载、删除文件及在ftp服务器上传文件夹的方法
# Java实现FTP批量大文件上传下载篇1
# Java实现ftp文件上传下载解决慢中文乱码多个文件下载等问题
# Java FTPClient实现文件上传下载
# Java实现FTP批量大文件上传下载篇2
# Java FTP上传下载删除功能实例代码
# Java工具jsch.jar实现上传下载
# 器上
# 上传
# 如有
# 希望能
# 谢谢大家
# 上传文件
# 主要是
# 包中
# 疑问请
# InputStream
# URL
# SocketException
# OutputStream
# InputStreamReader
# logging
# Log
# LogFactory
# apache
# FTPClientConfig
# URLConnection
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何处理CORS跨域请求?(配置示例)
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
网易LOFTER官网链接 老福特网页版登录地址
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
如何快速搭建支持数据库操作的智能建站平台?
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
如何在景安云服务器上绑定域名并配置虚拟主机?
iOS UIView常见属性方法小结
jQuery 常见小例汇总
桂林网站制作公司有哪些,桂林马拉松怎么报名?
如何快速上传建站程序避免常见错误?
千库网官网入口推荐 千库网设计创意平台入口
C++用Dijkstra(迪杰斯特拉)算法求最短路径
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】
Python数据仓库与ETL构建实战_Airflow调度流程详解
Android okhttputils现在进度显示实例代码
Laravel观察者模式如何使用_Laravel Model Observer配置
Linux后台任务运行方法_nohup与&使用技巧【技巧】
网站制作免费,什么网站能看正片电影?
深圳网站制作平台,深圳市做网站好的公司有哪些?
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
Laravel如何自定义错误页面(404, 500)?(代码示例)
想要更高端的建设网站,这些原则一定要坚持!
JavaScript数据类型有哪些_如何准确判断一个变量的类型
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
googleplay官方入口在哪里_Google Play官方商店快速入口指南
公司网站制作价格怎么算,公司办个官网需要多少钱?
iOS正则表达式验证手机号、邮箱、身份证号等
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
深入理解Android中的xmlns:tools属性
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
如何快速上传自定义模板至建站之星?
如何用美橙互联一键搭建多站合一网站?
Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
IOS倒计时设置UIButton标题title的抖动问题
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
如何在宝塔面板创建新站点?
微信h5制作网站有哪些,免费微信H5页面制作工具?
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
北京网站制作的公司有哪些,北京白云观官方网站?
上一篇:Mac与iPhone互传文件技巧
上一篇:Mac与iPhone互传文件技巧

