使用ftp读取文件夹中的多个文件,并删除
public class FTPUtils {
private static final Logger LOG = LoggerFactory.getLogger(FTPUtils.class);
/**
* 获取FTPClient对象
*
* @param ftpHost FTP主机服务器
* @param ftpPassword FTP 登录密码
* @param ftpUserName FTP登录用户名
* @param ftpPort FTP端口 默认为21
* @return
*/
private static FTPClient getFTPClient(String ftpHost, String ftpPassword,
String ftpUserName, int ftpPort) throws IOException {
FTPClient ftpClient = null;
ftpClient = new FTPClient();
ftpClient.connect(ftpHost, ftpPort);// 连接FTP服务器
ftpClient.login(ftpUserName, ftpPassword);// 登陆FTP服务器
if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
LOG.info("未连接到FTP,用户名或密码错误。");
ftpClient.disconnect();
} else {
LOG.info("FTP连接成功。");
}
return ftpClient;
}
/**
* 去 服务器的FTP路径下上读取文件
*
* @param ftpPath
* @param
* @return
*/
public static List<JSONArray> readConfigFileForFTP(String ftpPath, String ftpHost, String ftpPassword,
String ftpUserName, int ftpPort) {
InputStream in;
FTPClient ftpClient = null;
try {
ftpClient = getFTPClient(ftpHost, ftpPassword, ftpUserName, ftpPort);
List<JSONArray> list = new ArrayList<>();
LOG.info("开始读取绝对路径" + ftpPath + "文件!");
try {
ftpClient.setControlEncoding("UTF-8"); // 中文支持
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode();
ftpClient.changeWorkingDirectory(ftpPath);
FTPFile[] ftpFiles = ftpClient.listFiles(ftpPath);
for (FTPFile file : ftpFiles) {
String name = file.getName();
in = ftpClient.retrieveFileStream(new String(name.getBytes("UTF-8"), "ISO-8859-1"));
if (in != null) {
StringBuffer resultBuffer = new StringBuffer();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String data;
try {
while ((data = br.readLine()) != null) {
resultBuffer.append(data);
}
String string = resultBuffer.toString();
JSONArray jsonArray = JSONArray.parseArray(string);
list.add(jsonArray);
in.close();
boolean flag = ftpClient.deleteFile(name);
if (flag) {
System.out.println("删除文件成功");
}
ftpClient.completePendingCommand();
} catch (IOException e) {
LOG.error("文件读取错误。");
e.printStackTrace();
}
} else {
LOG.error("in为空,不能读取。");
}
}
} catch (FileNotFoundException e) {
LOG.error("没有找到" + ftpPath + "文件");
e.printStackTrace();
} catch (SocketException e) {
LOG.error("连接FTP失败.");
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
LOG.error("文件读取错误。");
}
return list;
} catch (SocketException e) {
LOG.info("FTP的IP地址可能错误,请正确配置。");
} catch (IOException e) {
LOG.info("FTP的端口错误,请正确配置。");
}
return null;
}
/**
* * 删除文件 *
*
* @param pathname FTP服务器保存目录 *
* @param filename 要删除的文件名称 *
* @return
*/
private static void deleteFile(String pathname, String filename, FTPClient ftpClient) {
try {
System.out.println("开始删除文件");
// 切换FTP目录
ftpClient.changeWorkingDirectory(pathname);
boolean flag = ftpClient.deleteFile(filename);
ftpClient.logout();
if (flag) {
System.out.println("删除文件成功");
}
} catch (Exception e) {
System.out.println("删除文件失败");
e.printStackTrace();
} finally {
if (ftpClient.isConnected()) {
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
适用于读取一个文件夹中的多个文件,并且每读取一个删除一个。
这里有一个小坑,就是如果文件夹里面有多个文件的时候,读取下一个文件的时候,输入流会报空指针异常,这里关键的一步就是
ftpClient.completePendingCommand();
必须加上这行代码。另外输出文件一定要先关闭流的使用!
使用ftp读取文件夹中的多个文件,并删除的更多相关文章
- java基础 File 递归删除文件夹中所有文件文件夹 目录(包含子目录)下的.java文件复制到e:/abc文件夹中, 并统计java文件的个数
File 递归删除文件夹中所有文件文件夹 package com.swift.kuozhan; import java.io.File; import java.util.Scanner; /*键盘录 ...
- 用字符流实现每个文件夹中创建包含所有文件信息的readme.txt
package com.readme; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; i ...
- 在文件夹中 的指定类型文件中 查找字符串(CodeBlocks+GCC编译,控制台程序,仅能在Windows上运行)
说明: 程序使用 io.h 中的 _findfirst 和 _findnext 函数遍历文件夹,故而程序只能在 Windows 下使用. 程序遍历当前文件夹,对其中的文件夹执行递归遍历.同时检查遍历到 ...
- 【源码】rm zip 删除文件夹中大量的小文件 百万 扫描文件时间
rm 删除文件夹中大量的小文件 百万 迟迟未删除 在扫描文件? rm删除命令源码分析 - ty_laurel的博客 - CSDN博客 https://blog.csdn.net/ty_laurel/ ...
- 在存放源程序的文件夹中建立一个子文件夹 myPackage。例如,在“D:\java”文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage)。在 myPackage 包中创建一个YMD类,该类具有计算今年的年份、可以输出一个带有年月日的字符串的功能。设计程序SY31.java,给定某人姓名和出生日期,计算该人年龄,并输出该人姓名、年龄、出生日期。程序使用YM
题目补充: 在存放源程序的文件夹中建立一个子文件夹 myPackage.例如,在“D:\java”文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage).在 m ...
- C++实现从一个文件夹中读出所有txt文件
前段时间做项目需要读取一个文件夹里面所有的txt文件,查询资料后得到以下实现方法:首先了解一下这个结构体struct _finddata_t { unsigned attrib; t ...
- shell脚本实例一,移动文件夹中大于2000B的文件到另一个文件夹
shell脚本能帮我们简化linux下的一些工作,现在有个需求,把TMPA文件夹下大于2000B的文件都移动到TMPB下 #! /bin/bash function movefiles() { ` d ...
- C# 1.将整个文件夹复制到目标文件夹中 2.将指定文件复制到指定目标文件夹中
].Items.Clear(); string filePath = Application.StartupPath; string sourcePath = Path.Combine(filePat ...
- ubuntu 用shell脚本实现将当前文件夹下全部文件夹中的某一类文件复制到同一文件夹下
当前文件夹下有一些文件和文件夹,当中每一个文件夹里都有若干.txt文件. 如今要求在当前文件夹创建一个新文件夹all,且将那些文件夹全部.txt文件 都复制到文件夹all.在ubuntu12.04的s ...
随机推荐
- 3、设置jsp上的类容自动更新
1.run->edit configurations进入下面的界面,并修改 On ‘Update’ action 为 Redeploy. On frame deactivation 为 ...
- 通配符的匹配很全面, 但无法找到元素 'mvc:annotation-driven' 的声明
通配符的匹配很全面, 但无法找到元素 'mvc:annotation-driven' 的声明 错误原因是springmvc中的约束信息不对 <beans xmlns="http://w ...
- Contest2162 - 2019-3-28 高一noip基础知识点 测试5 题解版
传送门 T1 单调栈 按照b排序 在家每一个物品时,判断一下a和b的关系 如果s[sta[top]].a>=s[i].b,就弹栈 记录所有时候的height,并取最大值 T2 单调栈裸题 单调栈 ...
- 一个老鸟发的公司内部整理的 Android 学习路线图
基础工具部分: 中文手册,我猜测是Maven中文手册,可是我并没有找到这样的资源,欢迎知道的朋友告诉我: Android部分有 『第三方库集合』,我没能找到资源地址: 书籍我大多是给的豆瓣链接,如果觉 ...
- 传输层--TCP和UDP的区别
UDP(用户数据报协议):为调用它的应用程序提供了一种不可靠.无连接的服务. TCP(传输控制协议):为调用它的应用程序提供了一种可靠的.面向连接的服务. 当设计一个网络应用程序时,该应用程序的开发人 ...
- ZOJ 4110 Strings in the Pocket (马拉车+回文串)
链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4110 题目: BaoBao has just found two s ...
- Mathematica/偏导数/最小二乘法(线性回归)
a = / a //输出的还是2/123 N[a] //输出的就是小数点 N[a,] //保留三位小数点 Clear[a] Solve[== x^- , x] //结果-3 和 3 Plot[Sin[ ...
- 基于WebGL/Threejs技术的BIM模型轻量化之图元合并
伴随着互联网的发展,从桌面端走向Web端.移动端必然的趋势.互联网技术的兴起极大地改变了我们的娱乐.生活和生产方式.尤其是HTML5/WebGL技术的发展更是在各个行业内引起颠覆性的变化.随着WebG ...
- Java版InfluxDB工具类
InfluxDB工具类 package com.influxdb.test; import java.util.Map; import org.influxdb.InfluxDB; import or ...
- web.xml中DispatcherServlet拦截器的配置详情
<welcome-file-list> <welcome-file>index.jsp</welcome-file> <welcome-file& ...