`

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.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;  
	}  


}

 

  • 大小: 22.3 KB
分享到:
评论

相关推荐

    Apache FtpServer详细配置.zip

    Apache FtpServer允许通过插件进行功能扩展,如支持SFTP、PASV地址范围选择、文件过滤等。安装插件通常需要将JAR文件添加到类路径,并在`ftpd.conf`中启用。 **六、测试与调试** 配置完成后,可以通过FTP客户端连接...

    ApacheCamel-FTP

    4. **文件过滤**:可以根据文件名、大小、日期等条件过滤要处理的文件。 5. **自动文件处理**:可以设置监控模式,当 FTP 服务器上新文件出现或文件被修改时,自动触发相应的业务逻辑。 6. **被动模式**:为了穿透...

    apache-ftpserver-1.0.6

    6. **插件和库**:Apache FTPServer支持插件架构,允许添加额外的功能,如文件过滤、审计日志等。`lib`目录可能包含这些插件的JAR文件。 7. **文档和示例**:可能包括README、CHANGES、LICENSE等文件,以及示例配置...

    apache-ftpserver-1.0.6.rar

    通过插件,你可以添加新的功能,如自定义认证机制、限速策略、文件过滤等。 在解压"apache-ftpserver-1.0.6"后,你会看到包括配置文件、启动脚本、文档和库文件在内的各种组件。配置文件(通常为`ftpserver.conf`)...

    java支持ftp下载,并简单实现过滤

    总结,Java中的FTP下载涉及到与Apache Commons Net库的集成,创建FTP连接,执行文件下载,并可选地实现文件过滤。配置文件用于存储连接参数,而批处理文件则简化了程序的启动过程。通过这些知识点,我们可以构建一个...

    java工具类 ftp 文件比较 socket http

    Java通过`java.net.FTPURLConnection`和`org.apache.commons.net.ftp.FTPClient`库提供FTP文件传输支持。`FTPURLConnection`是Java标准库的一部分,可以实现基本的FTP操作,如上传、下载和删除文件。而Apache ...

    org.apache.commons.net.ftp

    7. **FTPFileFilter**: 你可以自定义过滤器来筛选FTP服务器上的文件或目录,例如只选择特定类型的文件。 8. **FTPUtils**: 提供了一些实用方法,如读写文件、检查路径等,方便在FTP操作中使用。 9. **FTPCommand**...

    完整实现ftp上传与下载并解析csv文件

    通过以上步骤,我们可以构建一个完整的FTP文件传输系统,它不仅能上传和下载文件,还能解析CSV内容,对数据进行分析,并在出现问题时提供反馈和记录。这样的系统在数据处理、报告生成、自动化工作流等场景中非常有用...

    FTP文件上传jar包

    FTP文件上传jar包是Java开发中用于实现文件传输协议(FTP)操作的重要工具。这个压缩包包含了一系列必要的jar包,这些库提供了FTP客户端功能,使得开发者可以方便地在应用程序中进行文件的上传和下载。主要涉及的jar...

    java连接apache的FTP包commons-net-1.4.1.jar,jakarta-oro-2.0.8.jar

    例如,你可以用它来筛选特定格式的文件,或者在遍历远程目录时进行过滤。 使用这两个库,Java开发者可以在应用程序中方便地集成FTP功能,无论是进行文件的批量上传、下载,还是执行其他复杂的FTP操作。值得注意的是...

    ftpserver mina框架,适合学习

    Apache Mina FTPServer是一个基于Apache Mina框架的轻量级FTP服务器实现,它为开发者提供了构建自定义FTP服务器的能力。这个框架非常适合初学者学习,因为它提供了清晰的结构和丰富的文档,帮助理解网络通信和FTP...

    java访问FtpSever

    例如,解析服务器的响应消息,或者在配置文件中使用正则表达式定义文件过滤规则。 在实际开发中,确保正确处理FTP异常情况是非常重要的,例如网络中断、权限问题、文件不存在等。此外,还要注意FTP的被动模式...

    commons-vfs2-filters:已将Apache Commons IO文件过滤器移植到Commons虚拟文件系统(VFS)

    `commons-vfs2-filters`项目则是将这些Apache Commons IO中的文件过滤器功能移植到了Commons VFS2中,使得在VFS2环境下也可以方便地使用这些过滤器。这极大地增强了VFS2在处理大量文件时的能力,特别是在需要进行...

    ant ftp需要的jar

    总的来说,"ant ftp需要的jar"指的是在Ant中使用FTP任务进行文件传输时,必须包含的Apache Commons Net和Jakarta ORO库的JAR文件,它们提供了FTP操作的底层支持以及文本处理功能。正确配置这些依赖后,开发者可以在...

    kafka-connect-ftp:FTP服务器的Kafka连接源-监视FTP服务器上的文件并将更改输入到Kafka

    在`kafka-connect-ftp`中,我们可以选择合适的转换器,将FTP文件的内容转换为Kafka能识别的消息格式。 4. **任务并行度**:通过配置,可以控制多少个并行任务同时运行,从而提高数据处理的吞吐量。每个任务会独立...

    Apache HTTP Server Version 2.2 文档(2013.4.10最新)

    Apache 2.0 过滤器工作原理 Apache 2.0 中的Hook函数 Apache 2.0 开发者文档 将模块从Apache1.3转化到Apache2.0 Apache 2.0 对请求的处理 Apache 2.0 线程安全问题 经常问到的问题 认证、授权、访问控制 CGI动态页面...

    apache commons 开源工具列举

    2. **Apache Commons IO**: IO库是处理输入/输出操作的基石,它包含了文件读写、流操作、过滤器、转换器等功能。例如,FileUtils类提供了文件和目录的操作,如复制、移动、删除等,而IOUtils则有读取和写入流的便捷...

    Apache Commons书籍

    这个压缩包文件"Apache Commons书籍.chm"很可能包含了一本关于如何使用Apache Commons库的详细指南或参考手册。 Apache Commons库主要由一系列模块组成,每个模块专注于特定的功能领域,如IO(输入/输出)、Lang...

    ftp.zip用于连接ftpClient开发工具

    在实际开发中,通常会结合Spring框架或者Apache Camel的DSL来配置FTP客户端的行为,实现更高级的功能,如定时任务、错误处理、文件过滤等。通过这种方式,开发者可以专注于业务逻辑,而将文件传输的细节交给这些成熟...

    apache-mina-2.0.16

    压缩包子文件的文件名称列表仅给出了"apache-mina-2.0.16",这可能是由于实际的ZIP文件包含许多子目录和文件,如源代码、文档、库文件、示例程序等。这些子目录可能包括: 1. **src**:存放源代码,分为java和test...

Global site tag (gtag.js) - Google Analytics