• Java 操作FTP服务器进行下载文件


    用Java去操作FTP服务器去做下载,本文章里面分为单个下载和批量下载,批量下载只不过多了一层循环,为了方便参考,我代码都贴出来了。

    不管单个下载还是多个,一定要记得,远程服务器的直接写文件夹路径,别加什么ftp://ip了

    单个csv下载:

    1. import org.apache.commons.io.FileUtils;
    2. import org.apache.commons.net.ftp.FTP;
    3. import org.apache.commons.net.ftp.FTPClient;
    4. import java.io.File;
    5. import java.io.FileOutputStream;
    6. /**
    7. * Created by Administrator on 2018/8/29 0029.
    8. * FTP 工具类
    9. */
    10. public class FTPUtil {
    11. /************************** 方案一 ****************************/
    12. public static void main(String[] args) {
    13. FTPUtil f = new FTPUtil();
    14. f.download();
    15. }
    16. public void download(){
    17. //进行下载文件---------------------------------开始
    18. //远程服务器下载地址
    19. //远程路径路径直接主要写,不用在前面加ip什么的,会报路径找不到的
    20. String fileurl = "/pub/himawari/L2/xxxx.csv";
    21. //本地文件物理路径
    22. String realfilepath = "E:/xxxx.csv";
    23. //本地中新建文件夹目录
    24. System.out.println("存储路径realfilepath:" + realfilepath + "下载路径:" + fileurl);
    25. boolean bb = retepasvfile(realfilepath,fileurl,"xxxx.csv");
    26. }
    27. /**
    28. * 本地保存
    29. *
    30. * @param localurl 本地文件物理路径
    31. * @param hosturl 远程服务器下载地址
    32. * @param filename 文件名称
    33. *
    34. * @return
    35. */
    36. public synchronized boolean retepasvfile(String localurl, String hosturl, String filename) {
    37. FTPClient ftp = new FTPClient();
    38. boolean re = false;
    39. try {
    40. System.out.println("本地存储路径==:" + localurl);
    41. File file = FileUtils.getFile(localurl);
    42. ftp.setConnectTimeout(10000);
    43. ftp.setDataTimeout(10000);
    44. ftp.connect("192.168.1.12", 21);
    45. ftp.login("username", "pwd");
    46. //ftp.bin();
    47. // String str=ftp.pwd();
    48. ftp.enterLocalPassiveMode(); //被动模式
    49. ftp.setControlKeepAliveTimeout(60);
    50. ftp.setFileType(FTP.BINARY_FILE_TYPE);
    51. boolean b = ftp.changeWorkingDirectory(hosturl.substring(0, hosturl.lastIndexOf("/")));
    52. System.out.println("pwd:" + b + "---切换目录:" + hosturl.substring(0, hosturl.lastIndexOf("/")));
    53. long locationsize = file.length();//服务器上文件的大小
    54. if (b) {
    55. boolean res = false;
    56. res = ftp.retrieveFile(filename, new FileOutputStream(file));
    57. if (res) {
    58. //ftp.disconnect();
    59. System.out.println("文件下载完成");
    60. re = true;
    61. } else {
    62. System.out.println("文件下载失败");
    63. //ftp.disconnect();
    64. }
    65. }
    66. } catch (Exception e) {
    67. e.getStackTrace();
    68. System.out.println("retepasvfileSamba:e=3" + e);
    69. } finally {
    70. try {
    71. ftp.disconnect();
    72. } catch (Exception e) {
    73. }
    74. }
    75. return re;
    76. }
    77. /************************** 方案二 ****************************/
    78. public static void main(String[] args) {
    79. String server = "192.168.1.12";
    80. int port = 21;
    81. String username = "name";
    82. String password = "pwd";
    83. org.apache.commons.net.ftp.FTPClient ftpClient = new FTPClient();
    84. try {
    85. // 连接到FTP服务器
    86. ftpClient.connect(server, port);
    87. ftpClient.login(username, password);
    88. // 设置文件传输模式为二进制
    89. ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
    90. // 下载文件从FTP服务器
    91. File fileToDownload = new File("ceshi/1111.xlsx");
    92. FileOutputStream outputStream = new FileOutputStream(fileToDownload,true);
    93. ftpClient.retrieveFile("E:\\1111.xlsx", outputStream);
    94. outputStream.close();
    95. // 断开连接
    96. ftpClient.logout();
    97. ftpClient.disconnect();
    98. System.out.println("文件上传和下载成功");
    99. } catch (Exception e) {
    100. e.printStackTrace();
    101. }
    102. }
    103. }

    批量下载是基于第一个方案去做的:

    1. import org.apache.commons.io.FileUtils;
    2. import org.apache.commons.net.ftp.FTP;
    3. import org.apache.commons.net.ftp.FTPClient;
    4. import org.apache.commons.net.ftp.FTPFile;
    5. import java.io.*;
    6. import java.util.ArrayList;
    7. import java.util.List;
    8. public class Text {
    9. /*public static void main(String[] args) {
    10. Text f = new Text();
    11. f.download();
    12. }*/
    13. public void download(){
    14. //进行下载文件---------------------------------开始
    15. //远程服务器下载地址
    16. String fileurl = "/pub/19/"; //远程目录
    17. //本地文件物理路径
    18. String realfilepath = "E:/excel采集"; //本地目录
    19. //本地中新建文件夹目录
    20. System.out.println("存储路径realfilepath:" + realfilepath + "下载路径:" + fileurl);
    21. boolean bb = retepasvfile(realfilepath,fileurl);
    22. }
    23. /**
    24. * 本地保存
    25. *
    26. * @param localurl 本地文件物理路径
    27. * @param hosturl 远程服务器下载地址
    28. *
    29. * @return
    30. */
    31. public synchronized boolean retepasvfile(String localurl, String hosturl) {
    32. FTPClient ftp = new FTPClient();
    33. boolean re = false;
    34. try {
    35. System.out.println("本地存储路径==:" + localurl);
    36. File file = FileUtils.getFile(localurl);
    37. ftp.setConnectTimeout(10000);
    38. ftp.setDataTimeout(10000);
    39. ftp.connect("ftp.ptree.jaxa.jp", 21);
    40. ftp.login("fsr1812317746_gmail.com", "SP+wari8");
    41. //ftp.bin();
    42. // String str=ftp.pwd();
    43. ftp.enterLocalPassiveMode(); //被动模式
    44. ftp.setControlKeepAliveTimeout(60);
    45. ftp.setFileType(FTP.BINARY_FILE_TYPE);
    46. boolean b = ftp.changeWorkingDirectory(hosturl.substring(0, hosturl.lastIndexOf("/")));
    47. System.out.println("pwd:" + b + "---切换目录:" + hosturl.substring(0, hosturl.lastIndexOf("/")));
    48. FTPFile[] ftpFiles = ftp.listFiles();
    49. System.out.println(ftpFiles.length);
    50. if (b) {
    51. boolean res = false;
    52. //唯一和单个下载改动的就是这里,去循环获取,然后单个下载,如果数量多的情况下,可以使用线程
    53. for (FTPFile ftpFile : ftpFiles){
    54. res = ftp.retrieveFile(ftpFile.getName(), new FileOutputStream(file+"/"+ftpFile.getName()));
    55. if (res) {
    56. //ftp.disconnect();
    57. System.out.println(">>>>>> "+ftpFile.getName()+" 文件下载完成");
    58. re = true;
    59. } else {
    60. System.out.println("文件下载失败");
    61. //ftp.disconnect();
    62. }
    63. }
    64. }
    65. } catch (Exception e) {
    66. e.getStackTrace();
    67. System.out.println("retepasvfileSamba:e=3" + e);
    68. } finally {
    69. try {
    70. ftp.disconnect();
    71. } catch (Exception e) {
    72. }
    73. }
    74. return re;
    75. }
    76. }

  • 相关阅读:
    什么是系统架构师?什么是系统架构?
    速码!!BGP最全学习笔记:BGP概述
    每日三问-前端(第二十期)
    微服务熔断器的简单使用
    CH58X/CH57X/V208 Observer(观察者)例程讨论讲解
    kafka学习1 - 线程、进程消息通信方式、JMS模型、Kafka原理图
    用qemu + gdb调试linux内核
    层顶分布式光伏发电并网群调群控系统采集终端装置应用方案及分布式光伏调度数据远动通信屏柜配置方案
    阿里双十一交易核心链路产品--RocketMQ 底层原理及性能调优实战
    ES集群手动搭建步骤V1.0(基于elasticsearch-7.3.0版本)
  • 原文地址:https://blog.csdn.net/Liuj666/article/details/132708989