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. PostgreSql sql shell win10 下乱码解决

    重现步骤: 打开 SQL Shell (psql) Server [localhost]: Database [postgres]: Port ]: Username [postgres]: psql ...

  2. Android AVD启动报错: This AVD's configuration is missing a kernel file! Please ensure the file "kernel-qemu" is in the same location as your system image.

    启动Android SDK manager重新下载安装

  3. 小程序跳转 H5 时 cookie 值处理问题

    小程序使用 <web-view></web-view> 内嵌 H5,当跳转至 H5 后,校验用户的登录状态是最重要的. 在做手中的项目 b.xx.com 时,需要调用另一个域名 ...

  4. 20164305 徐广皓 Exp1+ 逆向进阶

    实验内容 Task1 (5-10分) 自己编写一个64位shellcode.参考shellcode指导. 自己编写一个有漏洞的64位C程序,功能类似我们实验1中的样例pwn1.使用自己编写的shell ...

  5. EOCS跨链核心技术内幕

    EOCS跨链技术的核心就是ICP模块,ICP即Inter Chain Protocol(跨链交互协议),下面着重介绍ICP工作原理和实现细节. Inter Chain Protocol(ICP) IC ...

  6. The base and high address of the custom IP are not correctly reflected in xparameters.h in SDK

    This issue has been observed in 2015.3, 2015.4, and 2015.4.1 builds of Vivado. When you create and a ...

  7. Linux Shell下”>/dev/null 2>&1“相关知识说明

    0:表示键盘输入(stdin)1:表示标准输出(stdout),系统默认是1 2:表示错误输出(stderr) command >/dev/null 2>&1 &  == ...

  8. python读取uti-8格式ini配置文件出现UnicodeDecodeError: 'gbk' codec can't decode byte 0xba in position 367: illegal multibyte sequence错误解决方法

    出现这种错误只需要在read下添加encoding='utf-8' 如: from configparser import ConfigParser cf = ConfigParser() cf.re ...

  9. Python脚本日志系统

    Python通过logging模块提供日志功能,关于logging模块的使用网络上已经有很多详细的资料,这里要分享的是怎样在实际工程中使用日志功能. 假设要开发一个自动化脚本工具,工程结构如下,Com ...

  10. MiniGUI 如何显示繁体字

    有两种编码格式都可以显示繁体字,一种是GBK,一种是BIG5: 由于MiniGUI官方提供的字库的字体大小太小,所以只得自己去做字库,我用一个字库生成软件,分别做了一个GBK编码的字库和一个BIG5编 ...