JAVA操作FTP(FTP工具类)

JAVA操作FTP(FTP工具类)JAVAFTP操作导入commons-net<dependency><groupId>commons-net</groupId><artifactId>commons-net</artifactId><version>3.6</version></dependency>packagecom.my.ftp.test;importjava.io.File;imp

大家好,又见面了,我是你们的朋友全栈君。

Java 操作 FTP、FTP工具类、Java实现FTP代码示例

导入commons-net

<dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>3.6</version>
</dependency>
package com.my.ftp.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;
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 org.apache.commons.net.ftp.FTPReply;
public class Ftp { 

private String Control_Encoding = "UTF-8";
private FTPClient client = null;
private String host = "";
private int port = 21;
private String user = "";
private String password = "";
private String ftpPath = "/";
@SuppressWarnings("unused")
private Ftp() { 

}
public Ftp(String host, int port, String user, String pwd) { 

this.host = host;
this.port = port;
this.user = user;
this.password = pwd;
}
/** * 获取当前FTP所在目录位置 * * @return */
public String getHome() { 

return this.ftpPath;
}
/** * 连接FTP Server * * @throws IOException */
public static final String ANONYMOUS_USER = "anonymous";
public void connect() throws Exception { 

if (client == null) { 

client = new FTPClient();
}
// 已经连接
if (client.isConnected()) { 

return;
}
// 编码
client.setControlEncoding(Control_Encoding);
try { 

// 连接FTP Server
client.connect(this.host, this.port);
// 登陆
if (this.user == null || "".equals(this.user)) { 

// 使用匿名登陆
client.login(ANONYMOUS_USER, ANONYMOUS_USER);
} else { 

client.login(this.user, this.password);
}
// 设置文件格式
client.setFileType(FTPClient.BINARY_FILE_TYPE);
// 获取FTP Server 应答
int reply = client.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) { 

client.disconnect();
throw new Exception("connection FTP fail!");
}
FTPClientConfig config = new FTPClientConfig(client.getSystemType().split(" ")[0]);
config.setServerLanguageCode("zh");
client.configure(config);
// 使用被动模式设为默认
client.enterLocalPassiveMode();
// 二进制文件支持
client.setFileType(FTP.BINARY_FILE_TYPE);
// 设置模式
client.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
} catch (IOException e) { 

throw new Exception("connection FTP fail! " + e);
}
}
/** * 断开FTP连接 * * @param ftpClient * @throws IOException */
public void close() { 

if (client != null && client.isConnected()) { 

try { 

client.logout();
client.disconnect();
} catch (IOException e) { 

e.printStackTrace();
}
}
}
/** * 获取文件列表 * * @return */
public List<FTPFile> list() { 

List<FTPFile> list = null;
try { 

FTPFile ff[] = client.listFiles(ftpPath);
if (ff != null && ff.length > 0) { 

list = new ArrayList<FTPFile>(ff.length);
Collections.addAll(list, ff);
} else { 

list = new ArrayList<FTPFile>(0);
}
} catch (IOException e) { 

e.printStackTrace();
}
return list;
}
/** * 切换目录 * * @param path * 需要切换的目录 * @param forcedIncrease * 如果目录不存在,是否增加 */
public void switchDirectory(String path, boolean forcedIncrease) { 

try { 

if (path != null && !"".equals(path)) { 

boolean ok = client.changeWorkingDirectory(path);
if (ok) { 

this.ftpPath = path;
} else if (forcedIncrease) { 

// ftpPath 不存在,手动创建目录
StringTokenizer token = new StringTokenizer(path, "\\//");
while (token.hasMoreTokens()) { 

String npath = token.nextToken();
client.makeDirectory(npath);
client.changeWorkingDirectory(npath);
if (ok) { 

this.ftpPath = path;
}
}
}
}
} catch (Exception e) { 

e.printStackTrace();
}
}
/** * 创建目录 * * @param path */
public void createDirectory(String path) { 

try { 

if (path != null && !"".equals(path)) { 

boolean ok = client.changeWorkingDirectory(path);
if (!ok) { 

// ftpPath 不存在,手动创建目录
StringTokenizer token = new StringTokenizer(path, "\\//");
while (token.hasMoreTokens()) { 

String npath = token.nextToken();
client.makeDirectory(npath);
client.changeWorkingDirectory(npath);
}
}
}
client.changeWorkingDirectory(this.ftpPath);
} catch (Exception e) { 

e.printStackTrace();
}
}
/** * 删除目录,如果目录中存在文件或者文件夹则删除失败 * * @param path * @return */
public boolean deleteDirectory(String path) { 

boolean flag = false;
try { 

flag = client.removeDirectory(path);
} catch (IOException e) { 

e.printStackTrace();
}
return flag;
}
/** * 删除文件 * * @param path * @return */
public boolean deleteFile(String path) { 

boolean flag = false;
try { 

flag = client.deleteFile(path);
} catch (IOException e) { 

e.printStackTrace();
}
return flag;
}
/** * 上传文件,上传文件只会传到当前所在目录 * * @param localFile * 本地文件 * @return */
public boolean upload(File localFile) { 

return this.upload(localFile, "");
}
/** * 上传文件,会覆盖FTP上原有文件 * * @param localFile * 本地文件 * @param reName * 重名 * @return */
public boolean upload(File localFile, String reName) { 

boolean flag = false;
String targetName = reName;
// 设置上传后文件名
if (reName == null || "".equals(reName)) { 

targetName = localFile.getName();
}
FileInputStream fis = null;
try { 

// 开始上传文件
fis = new FileInputStream(localFile);
client.setControlEncoding(Control_Encoding);
client.setFileType(FTPClient.BINARY_FILE_TYPE);
boolean ok = client.storeFile(targetName, fis);
if (ok) { 

flag = true;
}
} catch (IOException e) { 

e.printStackTrace();
}
return flag;
}
/** * 下载文件,如果存在会覆盖原文件 * * @param ftpFileName * 文件名称,FTP上的文件名称 * @param savePath * 保存目录,本地保存目录 * @return */
public boolean download(String ftpFileName, String savePath) { 

boolean flag = false;
File dir = new File(savePath);
if (!dir.exists()) { 

dir.mkdirs();
}
FileOutputStream fos = null;
try { 

String saveFile = dir.getAbsolutePath() + File.separator + ftpFileName;
fos = new FileOutputStream(new File(saveFile));
boolean ok = client.retrieveFile(ftpFileName, fos);
if (ok) { 

flag = true;
}
} catch (IOException e) { 

e.printStackTrace();
}
return flag;
}
public static void main(String args[]) { 

// 创建FTP对象
Ftp ftp = new Ftp("127.0.0.1", 21, "myftp", "myftp@2020");
try { 

// 连接FTP
ftp.connect();
// 移动工作空间、切换目录
System.out.println("当前位置:" + ftp.getHome());
ftp.switchDirectory("/test", true);
System.out.println("当前位置:" + ftp.getHome());
// 查询目录下的所有文件夹以及文件
List<FTPFile> list = ftp.list();
System.out.println("|-- " + ftp.getHome());
for (FTPFile f : list) { 

System.out.println(" |-- [" + (f.getType() == 0 ? "文件" : "文件夹") + "]" + f.getName());
}
// 上传文件
boolean r1 = ftp.upload(new File("C:\\Users\\joymt\\Documents\\ftp\\测试文件1.txt"), "测试文件2.txt");
System.out.println("上传文件:" + r1);
// 下载文件
boolean r2 = ftp.download("测试文件2.txt", "C:\\Users\\joymt\\Documents\\ftp");
System.out.println("下载文件:" + r2);
// 删除文件
boolean r3 = ftp.deleteFile("/test/测试文件2.txt");
System.out.println("删除文件:" + r3);
// 删除目录
boolean r4 = ftp.deleteDirectory("/test");
System.out.println("删除目录:" + r4);
} catch (Exception e) { 

e.printStackTrace();
}
ftp.close();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/133224.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 十八、职责链模式-推卸责任,不关我的事,我不管!#和设计模式一起旅行#

    不在其位,不谋其政! –出自《论语·泰伯》故事背景在现实世界中,有很多情况下会遇到一些推卸责任的场景,比如要办理一件事的时候,被告诉你要去做个做这个事情,但是去了这个地方,确告诉要到另一个地方去,最后搞了很久,才办完这一件事。这种情况下,就可以简单的称为踢皮球,也就是推卸责任。在软件中,当外部请求程序进行某个出来,这个程序无法处理就把该请求转给其他对象负责,当对个对象组…

  • 傅里叶变换的意义和理解(通俗易懂)

    傅里叶变换的意义和理解(通俗易懂)傅里叶变换的意义和理解(通俗易懂)这篇文章的核心思想就是:要让读者在不看任何数学公式的情况下理解傅里叶分析。傅里叶分析不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维模式。但不幸的是,傅里叶分析的公式看起来太复杂了,所以很多大一新生上来就懵圈并从此对它深恶痛绝。老实说,这么有意思的东西居然成了大学里的杀手课程,不得不归咎于编教材的人实在是太严肃了。(您把教材写得好玩一点会…

  • 逻辑漏洞之密码找回漏洞(semcms)「建议收藏」

    逻辑漏洞之密码找回漏洞(semcms)「建议收藏」目录什么是密码找回漏洞一般流程可能产生该漏洞的情况脑洞图1.用户凭证暴力破解2.返回凭证3.邮箱弱token4.用户凭证有效性5.重新绑定6.服务器验证7.用户身份验证8.找回步骤9.本地验证10.注入11.Token生成12.注册覆盖13.session覆盖演示暴破验证码找回密码更改id号修改admin密码靶场cms下载什么是密码找回漏洞利用漏洞修改他人帐号密码,甚至修改管理员的密码。一般流程1首先尝试正常找回密码流程,选择不同的找回方式,记录所有数据包2分析数据包,找到敏感部分3

  • 【数据结构】单链表上的基本运算

    【数据结构】单链表上的基本运算【数据结构】单链表上的基本运算

  • h3c路由器常用命令汇总_h3c命令手册

    h3c路由器常用命令汇总_h3c命令手册1、进入系统视图模式system-view2、为设备命名sysname3、显示当前配置displaycurrent-configuration4、中英文切换language-modeChinese|English5、进入以太网端口视图interfaceEthernet1/0/16、设置端口访问模式portlink-typeAccess|Trunk|Hybrid7、激活以太网端口undoshutdown8、关闭以太网端口shut

    2022年10月18日
  • 怎么做app软件_软件限制设备登录怎么激活成功教程

    怎么做app软件_软件限制设备登录怎么激活成功教程项目描述客户端,基于H5Plus使用MUI框架开发的APP,运行环境为小米手机真机测试。服务端,使用SpringBoot搭建的项目,运行环境为SpringBoot内置Tomcat,部署端口为8090。问题分析电脑和手机连接同一个WiFi,手机点击按钮,触发Ajax请求,无法访问在笔记本电脑上部署的SpringBoot后台。原Ajax请求地址,使用的是localhost,打开电脑cmd窗口,输入ipconfig查询电脑的ipv4地址,修改localhost为电脑私网IP。mui.ajax(“ht

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号