Java FTP操作
pom引用:

<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.6</version>
</dependency> <dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
代码:

package com.suncreate.wifi.tool; import org.apache.commons.io.IOUtils;
import org.apache.commons.net.PrintCommandListener;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.io.*;
import java.util.ArrayList;
import java.util.List; @Service
public class FtpUtils { private static final Logger LOGGER = LoggerFactory.getLogger(FtpUtils.class); private static final String SEPARATOR_CHAR = "/"; private static final String CURRENT_DIR_CHAR = "."; private static final String PARENT_DIR_CHAR = ".."; private static FTPClient ftp = new FTPClient(); private List<String> fileNameList = new ArrayList<>(); public List<String> getFileNameList() {
return fileNameList;
} @PostConstruct
public void init() {
login("127.0.0.1", 21, "admin", "123456");
} @PreDestroy
public void destroy() {
disConnection();
} public FtpUtils() {
} /**
* 重载构造函数
*
* @param isPrintCommmand 是否打印与FTPServer的交互命令
*/
public FtpUtils(boolean isPrintCommmand) {
if (isPrintCommmand) {
ftp.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
}
} /**
* 登陆FTP服务器
*
* @param host FTPServer IP地址
* @param port FTPServer 端口
* @param username FTPServer 登陆用户名
* @param password FTPServer 登陆密码
* @return 是否登录成功
* @throws IOException
*/
public boolean login(String host, int port, String username, String password) {
if (ftp.isAvailable()) {
return true;
}
try {
ftp.connect(host, port);
} catch (IOException e) {
LOGGER.error("can not connect ftp!", e);
}
if (FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
try {
if (ftp.login(username, password)) {
ftp.enterLocalPassiveMode();
ftp.setControlEncoding("UTF-8");
ftp.setFileType(FTP.BINARY_FILE_TYPE);
return true;
}
} catch (IOException e) {
LOGGER.error("can not login ftp!", e);
}
}
return false;
} /**
* 清空集合
*/
public void clearList() {
fileNameList.clear();
} /**
* 关闭数据链接
*
* @throws IOException
*/
public void disConnection() {
try {
if (ftp.isConnected()) {
ftp.logout();
ftp.disconnect();
LOGGER.info("close ftp connection success!");
}
} catch (IOException e) {
LOGGER.error("close ftp connection failed!", e);
}
} /**
* 递归遍历目录下面指定的文件名
*
* @param pathName 需要遍历的目录,必须以"/"开始和结束
* @param ext 文件的扩展名
* @throws IOException
*/
public void listFileName(String pathName, String ext) {
if (pathName.startsWith(SEPARATOR_CHAR) && pathName.endsWith(SEPARATOR_CHAR)) {
//更换目录到当前目录
FTPFile[] files = new FTPFile[]{};
try {
ftp.changeWorkingDirectory(pathName);
files = ftp.listFiles();
} catch (IOException e) {
LOGGER.info("traverse ftp dir failed!", e);
}
for (FTPFile file : files) {
if (file.isFile()) {
if (file.getName().endsWith(ext)) {
fileNameList.add(pathName + file.getName());
}
}
}
}
} /**
* 目录下面是否存在指定的文件
*/
public int fileExist(String pathName) {
int length = 0;
//更换目录到当前目录
try {
ftp.changeWorkingDirectory(pathName);
FTPFile[] ftpFiles = ftp.listFiles(pathName);
length = ftpFiles.length;
} catch (IOException e) {
e.printStackTrace();
}
return length;
} /**
* 遍历文件
*
* @param pathName 根路径
*/
public void listFileName(String pathName) {
listFileName(pathName, "zip");
} /**
* 获取图片流
*
* @param ftpPath 根路径
*/
public byte[] downloadFtpFile(String ftpPath) {
byte[] file = null;
InputStream inputStream = null;
try {
inputStream = ftp.retrieveFileStream(ftpPath);
file = IOUtils.toByteArray(inputStream);
} catch (Exception e) {
LOGGER.error("download ftp failed!", e);
} finally {
if (null != inputStream) {
try {
inputStream.close(); if (ftp.completePendingCommand()) {
LOGGER.info("download fileName={} success!", ftpPath);
} else {
LOGGER.warn("download fileName={} failed!", ftpPath);
}
} catch (IOException e) {
LOGGER.error("close ftp inputStream failed!", e);
}
}
}
return file;
} /**
* 删除ftp上的文件
*
* @param ftpFileName
* @return true || false
*/
public boolean removeFtpFile(String ftpFileName) {
boolean flag = false; try { flag = ftp.deleteFile(ftpFileName);
if (flag) {
LOGGER.info("delete fileName={} success!", ftpFileName);
} else {
LOGGER.warn("delete fileName={} failed!", ftpFileName);
}
} catch (IOException e) {
LOGGER.error("delete file failed!", e);
}
return flag;
} public static void main(String[] args) {
System.out.println(System.getProperty("user.dir"));
return; /*
FtpUtils ftpUtils = new FtpUtils(); ftpUtils.login("34.8.8.206", 21, "admin", "admin"); ftpUtils.listFileName("/D:/ftproot/2019gakm/");
ftpUtils.listFileName("/D:/ftproot/2019yryp/");
for (String arFile : ftpUtils.getFileNameList()) {
System.out.println("filename=" + arFile);
byte[] file = ftpUtils.downloadFtpFile(arFile);
System.out.println("bytefile=" + file);
}
ftpUtils.disConnection();*/
}
}
Java FTP操作的更多相关文章
- [Java] 使用 Apache的 Commons-net库 实现FTP操作
因为最近工作中需要用到FTP操作,而手上又没有现成的FTP代码.就去网上找了一下,发现大家都使用Apache的 Commons-net库中的FTPClient. 但是,感觉用起来不太方便.又在网上找到 ...
- 用edtftpj实现Java FTP客户端工具
edtftpj是一个java FTP工具包,使用非常方便,感觉比Apache的好用,但Apache更灵活.edtftpj有多种版本,分别是java..net和js版本.对于Java版的有一个免费版本. ...
- Java文件操作源码大全
Java文件操作源码大全 1.创建文件夹 52.创建文件 53.删除文件 54.删除文件夹 65.删除一个文件下夹所有的文件夹 76.清空文件夹 87.读取文件 88.写入文件 99.写入随机文件 9 ...
- 关于Java FTP SFTP的相关实际问题
第一个: java ftp使用的是Apache common-net,但是FTP服务侧提供的FTP服务器只支持SFTP,结果报 java.net.ConnectException: Connectio ...
- Java FTP 基本操作
最近工作中用到了 FTP 相关的操作,所以借此机会了解了下具体内容. FTP基础 关于 FTP 基础推荐阅读<使用 Socket 通信实现 FTP 客户端程序>,其中需要特别注意的是主动模 ...
- Java FTP客户端开源类库 edtFTPj
edtFTPj/Free是免费的流行的Java FTP库,全球公司依靠edtFTPj /Free 为它们的Java应用程序添加FTP客户端功能. (收费的支持SFTP.FTPS的edtFTPj/PRO ...
- Java实现操作dos命令
java实现操作dos命令的两种方式 1.读取文件中的命令 package com; import java.io.InputStream; public class cmd { public sta ...
- JAVA 链表操作:循环链表
主要分析示例: 一.循环链表简述 二.单链表循环链表 三.双链表循环链表 一.循环链表简述 循环链表即链表形成了一个循环的结构,尾节点不再指向NULL,而是指向头节点HEAD,此时判定链表的结束是尾节 ...
- java日期操作大全
摘自(http://www.blogjava.net/i369/articles/83483.html) java日期操作 大全 先来一个: 取得指定月份的第一天与取得指定月份的最后一天 http ...
- Java CSV操作(导出和导入)
Java CSV操作(导出和导入) CSV是逗号分隔文件(Comma Separated Values)的首字母英文缩写,是一种用来存储数据的纯文本格式,通常用于电子表格或数据库软件.在 CSV文件 ...
随机推荐
- 如何赋予 GPT/LLM 自我意识1
引子 这个周末OpenAI搞了一个大新闻,围绕 Sam Altman 和 Ilya Sutskever 的各种讨论遍地开花,而其中一个关注点就是他们对于 AGI 降临态度上的偏差.本文不打算讨论公司治 ...
- JAVAweek4
本周学习: 1.JAVA环境的搭建,包括JDK的下载,和classpath环境设置 2.*.java和*.class程序的运行 class Demo {public static void main( ...
- 【JSOI2008】火星人 (哈希+Splay)
题目 这种含有修改操作的就难以用后缀数组实现了,求LCP这种区间相等的类型可以想到用hash判断,同时LCP的答案大小符合二分条件可以二分求出,如果只有修改可以用线段树维护,因为还有有插入操作所以想到 ...
- 搭建一个简易的IPv6网络测试环境
背景 近期一个项目要求产品在IPv6网络环境部署,在此之前所有的项目网络环境都是IPv4,为了验证产品网络适配能力,需要搭建一套IPv6的网络测试环境,网上搜了很多教程,也在某东找了很多路由器,对于如 ...
- 34. 干货系列从零用Rust编写负载均衡及代理,异步测试在Rust中的实现
wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,四层TCP/UDP转发,七层负载均衡,内网穿透,后续将实现websocket代 ...
- NLP项目实战01--之电影评论分类
介绍: 欢迎来到本篇文章!在这里,我们将探讨一个常见而重要的自然语言处理任务--文本分类.具体而言,我们将关注情感分析任务,即通过分析电影评论的情感来判断评论是正面的.负面的. 展示: 训练展示如下: ...
- SpringCloudAlibaba-OSS文件上传
一.引入相关依赖 <dependencyManagement> <dependencies> <dependency> <groupId>com.ali ...
- python获取已安装程序列表
python获取已安装程序列表 本文主要讲述通过python脚本获取android 设备已安装列表. 首先,Python本身无法直接获取Android设备上已安装的程序列表,所以这里主要借助adb命令 ...
- 【Python】【OpenCV】轮廓检测
Code: 1 import cv2 2 import numpy as np 3 4 img = np.zeros((200, 200), dtype=np.uint8) 5 img[50:150, ...
- java,ArrayList类
ArrayList 是一个数组列表,可以将多个对象放入数组中,是一个长度可变的集合,提供了增删改查的功能. public class Test2 { public static void main(S ...