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; } }
相关推荐
Apache FtpServer允许通过插件进行功能扩展,如支持SFTP、PASV地址范围选择、文件过滤等。安装插件通常需要将JAR文件添加到类路径,并在`ftpd.conf`中启用。 **六、测试与调试** 配置完成后,可以通过FTP客户端连接...
4. **文件过滤**:可以根据文件名、大小、日期等条件过滤要处理的文件。 5. **自动文件处理**:可以设置监控模式,当 FTP 服务器上新文件出现或文件被修改时,自动触发相应的业务逻辑。 6. **被动模式**:为了穿透...
6. **插件和库**:Apache FTPServer支持插件架构,允许添加额外的功能,如文件过滤、审计日志等。`lib`目录可能包含这些插件的JAR文件。 7. **文档和示例**:可能包括README、CHANGES、LICENSE等文件,以及示例配置...
通过插件,你可以添加新的功能,如自定义认证机制、限速策略、文件过滤等。 在解压"apache-ftpserver-1.0.6"后,你会看到包括配置文件、启动脚本、文档和库文件在内的各种组件。配置文件(通常为`ftpserver.conf`)...
总结,Java中的FTP下载涉及到与Apache Commons Net库的集成,创建FTP连接,执行文件下载,并可选地实现文件过滤。配置文件用于存储连接参数,而批处理文件则简化了程序的启动过程。通过这些知识点,我们可以构建一个...
Java通过`java.net.FTPURLConnection`和`org.apache.commons.net.ftp.FTPClient`库提供FTP文件传输支持。`FTPURLConnection`是Java标准库的一部分,可以实现基本的FTP操作,如上传、下载和删除文件。而Apache ...
7. **FTPFileFilter**: 你可以自定义过滤器来筛选FTP服务器上的文件或目录,例如只选择特定类型的文件。 8. **FTPUtils**: 提供了一些实用方法,如读写文件、检查路径等,方便在FTP操作中使用。 9. **FTPCommand**...
通过以上步骤,我们可以构建一个完整的FTP文件传输系统,它不仅能上传和下载文件,还能解析CSV内容,对数据进行分析,并在出现问题时提供反馈和记录。这样的系统在数据处理、报告生成、自动化工作流等场景中非常有用...
FTP文件上传jar包是Java开发中用于实现文件传输协议(FTP)操作的重要工具。这个压缩包包含了一系列必要的jar包,这些库提供了FTP客户端功能,使得开发者可以方便地在应用程序中进行文件的上传和下载。主要涉及的jar...
例如,你可以用它来筛选特定格式的文件,或者在遍历远程目录时进行过滤。 使用这两个库,Java开发者可以在应用程序中方便地集成FTP功能,无论是进行文件的批量上传、下载,还是执行其他复杂的FTP操作。值得注意的是...
Apache Mina FTPServer是一个基于Apache Mina框架的轻量级FTP服务器实现,它为开发者提供了构建自定义FTP服务器的能力。这个框架非常适合初学者学习,因为它提供了清晰的结构和丰富的文档,帮助理解网络通信和FTP...
例如,解析服务器的响应消息,或者在配置文件中使用正则表达式定义文件过滤规则。 在实际开发中,确保正确处理FTP异常情况是非常重要的,例如网络中断、权限问题、文件不存在等。此外,还要注意FTP的被动模式...
`commons-vfs2-filters`项目则是将这些Apache Commons IO中的文件过滤器功能移植到了Commons VFS2中,使得在VFS2环境下也可以方便地使用这些过滤器。这极大地增强了VFS2在处理大量文件时的能力,特别是在需要进行...
总的来说,"ant ftp需要的jar"指的是在Ant中使用FTP任务进行文件传输时,必须包含的Apache Commons Net和Jakarta ORO库的JAR文件,它们提供了FTP操作的底层支持以及文本处理功能。正确配置这些依赖后,开发者可以在...
在`kafka-connect-ftp`中,我们可以选择合适的转换器,将FTP文件的内容转换为Kafka能识别的消息格式。 4. **任务并行度**:通过配置,可以控制多少个并行任务同时运行,从而提高数据处理的吞吐量。每个任务会独立...
Apache 2.0 过滤器工作原理 Apache 2.0 中的Hook函数 Apache 2.0 开发者文档 将模块从Apache1.3转化到Apache2.0 Apache 2.0 对请求的处理 Apache 2.0 线程安全问题 经常问到的问题 认证、授权、访问控制 CGI动态页面...
2. **Apache Commons IO**: IO库是处理输入/输出操作的基石,它包含了文件读写、流操作、过滤器、转换器等功能。例如,FileUtils类提供了文件和目录的操作,如复制、移动、删除等,而IOUtils则有读取和写入流的便捷...
这个压缩包文件"Apache Commons书籍.chm"很可能包含了一本关于如何使用Apache Commons库的详细指南或参考手册。 Apache Commons库主要由一系列模块组成,每个模块专注于特定的功能领域,如IO(输入/输出)、Lang...
在实际开发中,通常会结合Spring框架或者Apache Camel的DSL来配置FTP客户端的行为,实现更高级的功能,如定时任务、错误处理、文件过滤等。通过这种方式,开发者可以专注于业务逻辑,而将文件传输的细节交给这些成熟...
压缩包子文件的文件名称列表仅给出了"apache-mina-2.0.16",这可能是由于实际的ZIP文件包含许多子目录和文件,如源代码、文档、库文件、示例程序等。这些子目录可能包括: 1. **src**:存放源代码,分为java和test...