apache FTP 文件过滤

package org.ilp.utils;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

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.FTPListParseEngine;
import org.apache.commons.net.ftp.FTPReply;
import org.ilp.utils.ftp.filter.FTPFileFilterImpl;

public class FtpTest {

	public static void main(String[] args) {
		FTPClient ftp = new FTPClient();
		try {
			int reply;
			ftp.connect("192.168.0.190", 21);
			ftp.login("ftpuser", "123456x");
			ftp.enterLocalPassiveMode();
			ftp.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
			ftp.setFileType(FTP.BINARY_FILE_TYPE);
			ftp.setRemoteVerificationEnabled(false);
			reply = ftp.getReplyCode();
			if (!FTPReply.isPositiveCompletion(reply)) {
				ftp.disconnect();
				System.err.println("FTP服务器拒绝连接!");
				System.exit(1);
			} else {
				// 跳转到指定目录下
				boolean flag = ftp.changeWorkingDirectory("/TEST/IN/");
				if (!flag) {
					ftp.makeDirectory("/TEST/IN/");
				}
				// 默认获取当前目录
				FTPListParseEngine engine = ftp.initiateListParsing();
				// 分页获取文件
				// FTPFile[] files = engine.getNext(10);
				// 自定义过滤器
				FTPFileFilterImpl filter = new FTPFileFilterImpl();
				// 按文件名称过滤
				filter.setFileName("DEBMAS");
				FTPFile[] files = engine.getFiles(filter);
				for (FTPFile ftpFile : files) {
					if (ftpFile.isFile()) {
						InputStream retrieveFileStream = ftp.retrieveFileStream(ftpFile.getName());
						BufferedReader reader = new BufferedReader(new InputStreamReader(retrieveFileStream, "UTF-8"));
						String line;
						StringBuilder builder = new StringBuilder();
						while ((line = reader.readLine()) != null) {
							builder.append(line);
						}
						reader.close();
						if (retrieveFileStream != null) {
							retrieveFileStream.close();
						}
						ftp.completePendingCommand();
						String xml = builder.toString();
						System.out
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中监听FTP目录可以使用Apache Commons Net库中的FTPClient类和FTPFile类。 首先,创建FTP连接并登录到FTP服务器: ``` FTPClient ftpClient = new FTPClient(); ftpClient.connect(server, port); ftpClient.login(username, password); ``` 然后进入要监听的目录并设置FTP文件过滤器: ``` ftpClient.changeWorkingDirectory(directory); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); FTPFileFilter filter = new FTPFileFilter() { public boolean accept(FTPFile ftpFile) { return ftpFile.isFile(); } }; ``` 接下来可以使用Apache Commons Net库中的FTPFileObserver类实现FTP文件监听。FTPFileObserver类是一个抽象类,需要自定义一个继承自该类的监听器类,并重写其中的方法。 以下是一个简单的FTP文件监听器实现: ``` public class FtpFileListener extends FTPFileObserver { public FtpFileListener(FTPClient ftpClient, FTPFileFilter filter) { super(ftpClient, filter); } public void onFileCreate(FTPFile ftpFile) { System.out.println("New file created: " + ftpFile.getName()); } public void onFileDelete(FTPFile ftpFile) { System.out.println("File deleted: " + ftpFile.getName()); } public void onFileChange(FTPFile ftpFile) { System.out.println("File changed: " + ftpFile.getName()); } public void onDirectoryCreate(FTPFile ftpFile) { System.out.println("New directory created: " + ftpFile.getName()); } public void onDirectoryDelete(FTPFile ftpFile) { System.out.println("Directory deleted: " + ftpFile.getName()); } public void onError(Exception e) { e.printStackTrace(); } } ``` 最后,将监听器添加到FTPFileObserver对象中并启动监听: ``` FTPFileObserver observer = new FtpFileListener(ftpClient, filter); observer.start(); ``` 完整的代码示例: ``` 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.FTPFileFilter; import org.apache.commons.net.ftp.FTPFileObserver; public class FtpDirectoryListener { public static void main(String[] args) throws Exception { String server = "ftp.example.com"; int port = 21; String username = "username"; String password = "password"; String directory = "/ftp/directory/to/listen"; FTPClient ftpClient = new FTPClient(); ftpClient.connect(server, port); ftpClient.login(username, password); ftpClient.changeWorkingDirectory(directory); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); FTPFileFilter filter = new FTPFileFilter() { public boolean accept(FTPFile ftpFile) { return ftpFile.isFile(); } }; FTPFileObserver observer = new FtpFileListener(ftpClient, filter); observer.start(); } public static class FtpFileListener extends FTPFileObserver { public FtpFileListener(FTPClient ftpClient, FTPFileFilter filter) { super(ftpClient, filter); } public void onFileCreate(FTPFile ftpFile) { System.out.println("New file created: " + ftpFile.getName()); } public void onFileDelete(FTPFile ftpFile) { System.out.println("File deleted: " + ftpFile.getName()); } public void onFileChange(FTPFile ftpFile) { System.out.println("File changed: " + ftpFile.getName()); } public void onDirectoryCreate(FTPFile ftpFile) { System.out.println("New directory created: " + ftpFile.getName()); } public void onDirectoryDelete(FTPFile ftpFile) { System.out.println("Directory deleted: " + ftpFile.getName()); } public void onError(Exception e) { e.printStackTrace(); } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值