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读取文件夹中的多个文件,并删除的更多相关文章

  1. java基础 File 递归删除文件夹中所有文件文件夹 目录(包含子目录)下的.java文件复制到e:/abc文件夹中, 并统计java文件的个数

    File 递归删除文件夹中所有文件文件夹 package com.swift.kuozhan; import java.io.File; import java.util.Scanner; /*键盘录 ...

  2. 用字符流实现每个文件夹中创建包含所有文件信息的readme.txt

    package com.readme; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; i ...

  3. 在文件夹中 的指定类型文件中 查找字符串(CodeBlocks+GCC编译,控制台程序,仅能在Windows上运行)

    说明: 程序使用 io.h 中的 _findfirst 和 _findnext 函数遍历文件夹,故而程序只能在 Windows 下使用. 程序遍历当前文件夹,对其中的文件夹执行递归遍历.同时检查遍历到 ...

  4. 【源码】rm zip 删除文件夹中大量的小文件 百万 扫描文件时间

    rm  删除文件夹中大量的小文件 百万 迟迟未删除 在扫描文件? rm删除命令源码分析 - ty_laurel的博客 - CSDN博客 https://blog.csdn.net/ty_laurel/ ...

  5. 在存放源程序的文件夹中建立一个子文件夹 myPackage。例如,在“D:\java”文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage)。在 myPackage 包中创建一个YMD类,该类具有计算今年的年份、可以输出一个带有年月日的字符串的功能。设计程序SY31.java,给定某人姓名和出生日期,计算该人年龄,并输出该人姓名、年龄、出生日期。程序使用YM

    题目补充: 在存放源程序的文件夹中建立一个子文件夹 myPackage.例如,在“D:\java”文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage).在 m ...

  6. C++实现从一个文件夹中读出所有txt文件

    前段时间做项目需要读取一个文件夹里面所有的txt文件,查询资料后得到以下实现方法:首先了解一下这个结构体struct _finddata_t {    unsigned    attrib;    t ...

  7. shell脚本实例一,移动文件夹中大于2000B的文件到另一个文件夹

    shell脚本能帮我们简化linux下的一些工作,现在有个需求,把TMPA文件夹下大于2000B的文件都移动到TMPB下 #! /bin/bash function movefiles() { ` d ...

  8. C# 1.将整个文件夹复制到目标文件夹中 2.将指定文件复制到指定目标文件夹中

    ].Items.Clear(); string filePath = Application.StartupPath; string sourcePath = Path.Combine(filePat ...

  9. ubuntu 用shell脚本实现将当前文件夹下全部文件夹中的某一类文件复制到同一文件夹下

    当前文件夹下有一些文件和文件夹,当中每一个文件夹里都有若干.txt文件. 如今要求在当前文件夹创建一个新文件夹all,且将那些文件夹全部.txt文件 都复制到文件夹all.在ubuntu12.04的s ...

随机推荐

  1. Windows 查找txt后缀 文件复制

    Windows 查找文件 并且复制目录 for /f "delims==" %a in ('dir /b /s F:\F\*.TXT')do copy /-y "%a&q ...

  2. 第十三届东北师范大学程序设计竞赛热身赛 C(exgcd+欧拉函数)

    题目链接 思路 对于答案,我们考虑对于每个可行的$c$会和多少$d$产生合法序偶.首先证明$c$和$b$必然互质. 假设$c$和$b$不互质,那么设$t_{1}=gcd(c, b),(t_{1} &g ...

  3. 查看提交历史(git log)

    git log 命令 在完成了几次提交,或者克隆了一个已有提交历史的仓库后,要查看历史提交记录,可以通过git log命令来实现. $ git log commit 0becea8e1966df258 ...

  4. 搭建微信小程序的本地测试服务器 json-server

    1.首先需要在windows环境下安装node.js 选择 Windows Installer 下载对应的系统版本就行,然后一路next,这种方式安装好以后会把环境变量也配置好了,直接在命令行下输入 ...

  5. CentOS命令登录MySQL时,报错ERROR 1045 (28000): Access denied for user root@localhost (using password: NO)错误解决方法

    1.停用mysql服务:# /etc/rc.d/init.d/mysqld stop 2.输入命令:# mysqld_safe --user=mysql --skip-grant-tables --s ...

  6. L2-004 这是二叉搜索树吗? (25 分) (树)

    链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805070971912192 题目: 一棵二叉搜索树可被递归地定义为 ...

  7. Qt for Android开发总结

    近段时间,本人使用Qt5.3.0开发了Android应用,由于官方资料较少,在此记录开发过程遇到的问题及解决方法 1.Android平台的视频播放,只能使用qml的MediaPlayer 2.qml中 ...

  8. 【easy】268. Missing Number

    Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missin ...

  9. Linux中普通用户配置sudo权限(带密或免密)

    配置步骤如下: 1.登陆或切换到root用户下: 2.添加sudo文件的写权限,命令是:chmod u+w /etc/sudoers 3.编辑sudoers文件:vi /etc/sudoers 找到这 ...

  10. 十 LVS 负载均衡

    回顾nginx 反向代理负载均衡 负载均衡的妙用 负载均衡(Load Balance)集群提供了一种廉价.有效.透明的方法, 来扩展网络设备和服务器的负载.带宽.增加吞吐量.加强网络数据处理能力. 提 ...