当前位置: 首页 > news >正文

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

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

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

单个csv下载:


import org.apache.commons.io.FileUtils;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;import java.io.File;
import java.io.FileOutputStream;/*** Created by Administrator on 2018/8/29 0029.* FTP 工具类*/public class FTPUtil {/************************** 方案一 ****************************/public static void main(String[] args) {FTPUtil f = new FTPUtil();f.download();}public void download(){//进行下载文件---------------------------------开始//远程服务器下载地址//远程路径路径直接主要写,不用在前面加ip什么的,会报路径找不到的String fileurl = "/pub/himawari/L2/xxxx.csv";  //本地文件物理路径String realfilepath = "E:/xxxx.csv";//本地中新建文件夹目录System.out.println("存储路径realfilepath:" + realfilepath + "下载路径:" + fileurl);boolean bb = retepasvfile(realfilepath,fileurl,"xxxx.csv");}/*** 本地保存** @param localurl 本地文件物理路径* @param hosturl 远程服务器下载地址* @param filename 文件名称** @return*/public synchronized boolean retepasvfile(String localurl, String hosturl, String filename) {FTPClient ftp = new FTPClient();boolean re = false;try {System.out.println("本地存储路径==:" + localurl);File file = FileUtils.getFile(localurl);ftp.setConnectTimeout(10000);ftp.setDataTimeout(10000);ftp.connect("192.168.1.12", 21);ftp.login("username", "pwd");//ftp.bin();//  String str=ftp.pwd();ftp.enterLocalPassiveMode(); //被动模式ftp.setControlKeepAliveTimeout(60);ftp.setFileType(FTP.BINARY_FILE_TYPE);boolean b = ftp.changeWorkingDirectory(hosturl.substring(0, hosturl.lastIndexOf("/")));System.out.println("pwd:" + b + "---切换目录:" + hosturl.substring(0, hosturl.lastIndexOf("/")));long locationsize = file.length();//服务器上文件的大小if (b) {boolean res = false;res = ftp.retrieveFile(filename, new FileOutputStream(file));if (res) {//ftp.disconnect();System.out.println("文件下载完成");re = true;} else {System.out.println("文件下载失败");//ftp.disconnect();}}} catch (Exception e) {e.getStackTrace();System.out.println("retepasvfileSamba:e=3" + e);} finally {try {ftp.disconnect();} catch (Exception e) {}}return re;}/************************** 方案二 ****************************/public static void main(String[] args) {String server = "192.168.1.12";int port = 21;String username = "name";String password = "pwd";org.apache.commons.net.ftp.FTPClient ftpClient = new FTPClient();try {// 连接到FTP服务器ftpClient.connect(server, port);ftpClient.login(username, password);// 设置文件传输模式为二进制ftpClient.setFileType(FTP.BINARY_FILE_TYPE);// 下载文件从FTP服务器File fileToDownload = new File("ceshi/1111.xlsx");FileOutputStream outputStream = new FileOutputStream(fileToDownload,true);ftpClient.retrieveFile("E:\\1111.xlsx", outputStream);outputStream.close();// 断开连接ftpClient.logout();ftpClient.disconnect();System.out.println("文件上传和下载成功");} catch (Exception e) {e.printStackTrace();}}}

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

import org.apache.commons.io.FileUtils;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;import java.io.*;
import java.util.ArrayList;
import java.util.List;public class Text {/*public static void main(String[] args) {Text f = new Text();f.download();}*/public void download(){//进行下载文件---------------------------------开始//远程服务器下载地址String fileurl = "/pub/19/"; //远程目录//本地文件物理路径String realfilepath = "E:/excel采集"; //本地目录//本地中新建文件夹目录System.out.println("存储路径realfilepath:" + realfilepath + "下载路径:" + fileurl);boolean bb = retepasvfile(realfilepath,fileurl);}/*** 本地保存** @param localurl 本地文件物理路径* @param hosturl 远程服务器下载地址** @return*/public synchronized boolean retepasvfile(String localurl, String hosturl) {FTPClient ftp = new FTPClient();boolean re = false;try {System.out.println("本地存储路径==:" + localurl);File file = FileUtils.getFile(localurl);ftp.setConnectTimeout(10000);ftp.setDataTimeout(10000);ftp.connect("ftp.ptree.jaxa.jp", 21);ftp.login("fsr1812317746_gmail.com", "SP+wari8");//ftp.bin();//  String str=ftp.pwd();ftp.enterLocalPassiveMode(); //被动模式ftp.setControlKeepAliveTimeout(60);ftp.setFileType(FTP.BINARY_FILE_TYPE);boolean b = ftp.changeWorkingDirectory(hosturl.substring(0, hosturl.lastIndexOf("/")));System.out.println("pwd:" + b + "---切换目录:" + hosturl.substring(0, hosturl.lastIndexOf("/")));FTPFile[] ftpFiles = ftp.listFiles();System.out.println(ftpFiles.length);if (b) {boolean res = false;//唯一和单个下载改动的就是这里,去循环获取,然后单个下载,如果数量多的情况下,可以使用线程for (FTPFile ftpFile  : ftpFiles){res = ftp.retrieveFile(ftpFile.getName(), new FileOutputStream(file+"/"+ftpFile.getName()));if (res) {//ftp.disconnect();System.out.println(">>>>>> "+ftpFile.getName()+" 文件下载完成");re = true;} else {System.out.println("文件下载失败");//ftp.disconnect();}}}} catch (Exception e) {e.getStackTrace();System.out.println("retepasvfileSamba:e=3" + e);} finally {try {ftp.disconnect();} catch (Exception e) {}}return re;}}

http://www.lryc.cn/news/156813.html

相关文章:

  • 物理机服务器应该注意的事
  • 信息化发展24
  • Qt开发_调用OpenCV(3.4.7)设计完成人脸检测系统
  • Java 中 List 删除元素
  • Redis:StringRedisTemplate简介
  • pytorch-神经网络-手写数字分类任务
  • 【群智能算法改进】一种改进的鹈鹕优化算法 IPOA算法[1]【Matlab代码#57】
  • C++初阶:C++入门
  • golang操作数据库--gorm框架、redis
  • 10 种常用的字符串方法
  • CSDN每日一练 |『生命进化书』『订班服』『c++难题-大数加法』2023-09-06
  • echarts饼图label自定义样式
  • Unity汉化一个插件 制作插件汉化工具
  • 从过滤器初识责任链设计模式
  • Redis7安装配置
  • 切分支解决切不走因为未合并的路径如何解决
  • 自动化运维:Ansible之playbook基于ROLES部署LNMP平台
  • SpringBoot整合MQ
  • 算法训练day37|贪心算法 part06(LeetCode738.单调递增的数字)
  • 【C++基础】4. 变量
  • jmeter setUp Thread Group
  • 图神经网络教程之GCN(pyG)
  • python中的逻辑运算
  • TortoiseGit设置作者信息和用户名、密码存储
  • Fragment.OnPause的事情
  • 【C++基础】5. 变量作用域
  • Python列表排序
  • (云HIS)云医院管理系统源码 SaaS模式 B/S架构 基于云计算技术
  • sql:SQL优化知识点记录(十一)
  • leetcode-链表类题目