JAVA读取FTP服务器文件内容
发布日期:2021-07-27 12:52:53
浏览次数:3
分类:技术文章
本文共 5195 字,大约阅读时间需要 17 分钟。
import org.apache.commons.net.ftp.FTPClient;import org.apache.commons.net.ftp.FTPFile;import org.apache.commons.net.ftp.FTPReply;import java.io.*;import java.net.SocketException;public class FTPUtil { /** * 打开FTP服务链接 * @param ftpHost * @param ftpPort * @param ftpUserName * @param ftpPassword */ public static FTPClient getFTPClient(String ftpHost, Integer ftpPort, String ftpUserName, String ftpPassword){ FTPClient ftpClient = null; try { ftpClient = new FTPClient(); ftpClient.setConnectTimeout(60000); if(ftpPort != null){ ftpClient.connect(ftpHost, ftpPort);// 连接FTP服务器 }else { ftpClient.connect(ftpHost);// 连接FTP服务器 } if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) { if (ftpClient.login(ftpUserName, ftpPassword)) {// 登陆FTP服务器 if (FTPReply.isPositiveCompletion(ftpClient.sendCommand( "OPTS UTF8", "ON"))) {// 开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就使用本地编码(GBK). ftpClient.setControlEncoding("UTF-8"); }else { ftpClient.setControlEncoding("GBK"); } ftpClient.enterLocalPassiveMode();// 设置被动模式 ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);// 设置传输的模式,以二进制流的方式读取 ftpClient.enterLocalPassiveMode(); System.out.println("FTP服务连接成功!"); }else { System.out.println("FTP服务用户名或密码错误!"); disConnection(ftpClient); } }else { System.out.println("连接到FTP服务失败!"); disConnection(ftpClient); } } catch (SocketException e) { e.printStackTrace(); disConnection(ftpClient); System.out.println("FTP的IP地址可能错误,请正确配置。"); } catch (IOException e) { e.printStackTrace(); disConnection(ftpClient); System.out.println("FTP的端口错误,请正确配置。"); } return ftpClient; } /** * 关闭FTP服务链接 * @throws IOException */ public static void disConnection(FTPClient ftpClient){ try { if(ftpClient.isConnected()){ ftpClient.disconnect(); } } catch (IOException e) { e.printStackTrace(); } } /** * 获取文件夹下的所有文件信息 * @param path 文件路径 */ public static FTPFile[] getFTPDirectoryFiles(FTPClient ftpClient,String path){ FTPFile[] files = null; try { ftpClient.changeWorkingDirectory(path); files = ftpClient.listFiles(); }catch (Exception e){ e.printStackTrace(); //关闭连接 disConnection(ftpClient); System.out.println("FTP读取数据异常!"); } return files; } /** * 获取文件夹下的所有文件信息 * @param path 文件路径 */ public static InputStream getFTPFile(FTPClient ftpClient,String path,String fileName){ InputStream in = null; try { ftpClient.changeWorkingDirectory(path); FTPFile[] files = ftpClient.listFiles(); if(files.length > 0){ in = ftpClient.retrieveFileStream(fileName); } }catch (Exception e){ e.printStackTrace(); System.out.println("FTP读取数据异常!"); }finally { //关闭连接 disConnection(ftpClient); } return in; } public static void main(String args[]){ InputStream in = null; BufferedReader br = null; try{ String path = "/home/ftp/"; //读取单个文件 FTPClient ftpClient = getFTPClient("10.1.1.1",21,"username","123456"); String fileName = "person.txt"; in = getFTPFile(ftpClient,path,fileName); if(in != null){ br = new BufferedReader(new InputStreamReader(in,"GBK")); String data = null; while ((data = br.readLine()) != null) { String[] empData = data.split(";"); System.out.println(empData[0]+" "+empData[1]); } } //读取文件夹下的所有文件 FTPClient ftpClient1 = getFTPClient("10.1.1.1",21,"username","123456"); FTPFile[] files = getFTPDirectoryFiles(ftpClient1,path); if(files != null && files.length > 0){ for (int i = 0; i < files.length; i++) { if(files[i].isFile()){ in = ftpClient1.retrieveFileStream(files[i].getName()); br = new BufferedReader(new InputStreamReader(in,"GBK")); System.out.println(files[i].getName()); } } } //关闭连接 disConnection(ftpClient1); }catch (Exception e){ e.printStackTrace(); }finally { try{ //关闭流 if (br != null) br.close(); if (in != null) in.close(); }catch (IOException e){ e.printStackTrace(); } } }}
转载地址:https://blog.csdn.net/rhx_1989/article/details/88424215 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年03月25日 23时36分37秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Java高并发测试框架JCStress
2019-04-27
阿里P8大神教我yaml语法,我终于不再只是使用字符串类型了
2019-04-27
Springboot 集成 i8n,两行代码实现国际化,你不想学吗?
2019-04-27
LeetCode 每日一题「判定字符是否唯一」
2019-04-27
一次完整的HTTP请求与响应涉及哪些知识?
2019-04-27
HashMap 为什么线程不安全?
2019-04-27
厉害了,Servlet3的异步处理机制
2019-04-27
Static 关键字的 5 种用法,你会几种?
2019-04-27
你还在百度这些代码吗?
2019-04-27
为什么 Java 不支持类多重继承?
2019-04-27
微服务设计 10 大反模式和陷阱!
2019-04-27
如何优雅地终止一个线程?
2019-04-27
Java 程序员必须掌握的 5 个注解!
2019-04-27
Intellij IDEA Debug 调试技巧
2019-04-27
Tomcat 连接数与线程池详解
2019-04-27
漫画:HTTP 协议极简教程,傻瓜都能看懂!
2019-04-27
java高级应用:线程池全面解析
2019-04-27
Spring Boot 打包插件,真是太有用了!
2019-04-27
7 个棘手的 JavaScript 面试题!
2019-04-27
世纪之战:Python和Java,到底学哪个更好?
2019-04-27