apache FTP 文件过滤

本文介绍了一个使用Java实现的FTP客户端操作示例,包括连接FTP服务器、读取指定目录下的文件内容、自定义文件过滤器等功能,并提供了完整的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.println(ftpFile.getName() + ":" + xml);
					}
				}
			}
			ftp.logout();
		} catch (Exception e) {
			System.out.println(e.getMessage());
		} finally {
			if (ftp.isConnected()) {
				try {
					ftp.disconnect();
				} catch (Exception ioe) {

				}
			}
		}

	}

}

 

package org.ilp.utils.ftp.filter;

import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPFileFilter;

public class FTPFileFilterImpl implements FTPFileFilter {

	private String fileName;

	@Override
	public boolean accept(FTPFile file) {
		String name = file.getName();
		if (name.startsWith(fileName)) {
			return true;
		}
		return false;
	}

	public String getFileName() {
		return fileName;
	}

	public void setFileName(String fileName) {
		this.fileName = fileName;
	}

}

 

 

 工具类封装

package org.ilp.utils.ftp;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

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

/**
 * 
 * @author Administrator
 *
 */
public class FtpUtils {

	private  FTPClient ftp;
	
	public  FtpUtils() {   
	}
	
    public  FtpUtils(String ip, int port, String userName, String password,String pathname) throws Exception{
	     this.connectServer(ip, port, userName, password, pathname);
    }
    /**
     *  连接服务器
     * @param ip ip地址
     * @param port 端口号
     * @param userName 用户
     * @param password 密码
     * @param pathname 跳转到指定的目录
     * @throws Exception
     */
	public  void connectServer(String ip, int port, String userName, String password,String pathname) throws Exception {
		try {
			ftp = new FTPClient();
			ftp.connect(ip, port);
			ftp.login(userName, password);
			ftp.enterLocalPassiveMode();
			ftp.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
			ftp.setFileType(FTP.BINARY_FILE_TYPE);
			ftp.setRemoteVerificationEnabled(false);
			if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
				ftp.disconnect();
				throw new Exception("FTP服务器拒绝连接!");
			} else {
				//跳转到指定的位置
				boolean flag  = ftp.changeWorkingDirectory(pathname);
				 if(!flag){
		               ftp.makeDirectory(pathname);
		           }
			}
		} catch (Exception e) {
			   throw new Exception("FTP连接异常!:"+e.getMessage());
		}
	}

	/**
	 * 关闭连接
	 */
	public  void closeServer() {
		if (ftp.isConnected()) {
			try {
				ftp.logout();
				ftp.disconnect();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	/**
	 *  获取到指定文件内容
	 * @param pathname 文件目录
	 * @return Map<String,String> key 文件名,value文件内容
	 */
	public  Map<String,String> getXmlData(String pathname){
		Map<String,String> map =new HashMap<String,String>();
		try {  
			      FTPListParseEngine engine = ftp.initiateListParsing(pathname);
			      while (engine.hasNext()) {	
					//分页每次获取10个文件
			    	  FTPFile[] files = engine.getNext(10);
						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();
								map.put(ftpFile.getName(), builder.toString());
							}
						}
			      }
		} catch (IOException e) {
			e.printStackTrace();
		}
		return map;
	}
	
	
	/**
	 *  获取到指定文件内容
	 * @param filter 过滤器
	 * @return Map<String,String> key 文件名,value文件内容
	 */
	public  Map<String,String> getXmlData(FTPFileFilter filter){
		Map<String,String> map =new HashMap<String,String>();
		try {  
			      FTPListParseEngine engine = ftp.initiateListParsing();
			      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();
								map.put(ftpFile.getName(), builder.toString());
							}
						}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return map;
	}
	
	/**
	 *  删除文件
	 * @param fileName 文件名
	 */                                                             
	public  void deleteFile(String remote,String fileName) {
		try {
			ftp.changeWorkingDirectory(remote);
			ftp.deleteFile(fileName);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 *  删除文件
	 * @param fileName 文件名
	 */                                                             
	public  void deleteFile(String fileName) {
		try {
			ftp.deleteFile(fileName);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	
	/**
	 *  跳转到指定的目录
	 * @param path 目录
	 */
	public void gotoDirectory(String path){
		try {
			 ftp.changeWorkingDirectory(path);
		} catch (IOException e) {
			 e.printStackTrace();
		}
		
	}
	
    /**
     * 
     * @param content 写入文件内容
     * @param path 路径
     * @param newfilename 文件名称
     */
	public  void writeFile(String content,String path,String newfilename) {
	  SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd_HHmmss");//设置日期格式
		// 以当前系统时间拼接文件名
	  if(newfilename.equalsIgnoreCase("")||newfilename==null)
			newfilename = df.format(new Date())+".bak";
		InputStream is = null;
		try {
			is = new ByteArrayInputStream(content.getBytes());
			ftp.changeWorkingDirectory(path);
			ftp.setBufferSize(1024);
			ftp.setFileType(FTPClient.BINARY_FILE_TYPE);  
			ftp.storeFile(new String(newfilename.getBytes("UTF-8"),"utf-8"), is);
		} catch (IOException e) {
			e.printStackTrace();
		}finally {  
            if (ftp.isConnected()) {  
                try {  
                	ftp.disconnect();  
                } catch (Exception e) {  
                    e.printStackTrace();  
                }  
            }  
        }  
	}

	
	//文件上传
	public  boolean uploadFile(String fileName,String filePath,String remote) {
		boolean flag = false ;
		InputStream inputStream = null;
		try {
			if(!ftp.changeWorkingDirectory(remote)){
				ftp.makeDirectory(remote);
			}
			ftp.changeWorkingDirectory(remote);
			inputStream= new FileInputStream(new File(filePath));
			flag= ftp.storeFile(fileName, inputStream);
		} catch (Exception e) {
			System.err.println(e.getMessage());
			e.printStackTrace();
		} finally {
			 if(inputStream!=null){
				 try {
					inputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			 }
		}
		return flag;
	}
	
	
	
	
	public boolean uploadFile(String path, String filename, InputStream input) {  
	    boolean success = false;  
	    try {  
	    	if(!ftp.changeWorkingDirectory(path)){
				ftp.makeDirectory(path);
			}
	        ftp.changeWorkingDirectory(path);  
	        ftp.storeFile(filename, input);            
	        input.close();  
	        success = true;  
	    } catch (IOException e) {  
	        e.printStackTrace();  
	    } finally {  
	        if (!ftp.isConnected()) {  
	            try {  
	            	ftp.disconnect();  
	            } catch (IOException ioe) {  
	            	System.err.println(ioe.getMessage());
	            }  
	        }  
	    }  
	    return success;  
	}  


}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值