Java 两台服务器间使用FTP进行文件传输

news/2025/3/12 12:30:33/

背景:需要把服务器A中的文件拷贝至服务器B中,要求使用FTP进行传输,当文件传输未完成时文件是tmp格式的,传输完毕后显示为原格式(此处是grib2)。

package org.example;import org.apache.commons.io.FileUtils;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.example.FtpBean.FtpBean;
import org.example.FtpUtil.FtpUtil;import java.io.*;
import java.nio.charset.StandardCharsets;public class FtpSimple {public static void main(String[] args) throws IOException {// 连接服务器FTPClient ftpClient = null;FTPClient ftpClient2 = null;String rootDir = "/文件目录/";try {ftpClient = new FTPClient();ftpClient.connect("IP地址");ftpClient.enterLocalActiveMode();ftpClient.login("用户名","密码");System.out.println("A建立连接!");ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); // 设置二进制传输ftpClient.changeWorkingDirectory(rootDir);// 进入目标文件所在目录ftpClient2 = new FTPClient();ftpClient2.connect("IP地址");ftpClient2.enterLocalActiveMode();ftpClient2.login("用户名","密码");System.out.println("B建立连接!");ftpClient2.setFileType(FTPClient.BINARY_FILE_TYPE); // 设置二进制传输ftpClient2.changeWorkingDirectory("/文件目录/");System.out.println("切换至目录成功!开始遍历...");FTPFile[] files = ftpClient.listFiles();System.out.println("文件数目(包括2个系统文件):"+files.length);Integer flag_temp = 0;// 遍历文件,获得文件流for(FTPFile file: files) {String fileName = file.getName();if(fileName.endsWith("grib2")) // 确定格式,以免读取到系统文件{InputStream inputStream = ftpClient.retrieveFileStream(rootDir+fileName);try{ftpClient2.storeFile(fileName+".tmp",inputStream);flag_temp += 1; // 传输成功的文件数量}catch(Exception e) {System.out.println(e);}inputStream.close();ftpClient2.rename(fileName+".tmp", fileName);ftpClient.completePendingCommand(); // 必须加,不然只有第一个文件可以传输成功。if(flag_temp == files.length - 2){System.out.println("传输完毕!");}}}// 关闭ftp连接ftpClient.disconnect();ftpClient2.disconnect();}catch (Exception e){StringBuffer sb = new StringBuffer("异常:"+e.toString());System.out.println(sb);}}
}


http://www.ppmy.cn/news/980898.html

相关文章

嵌入式:QT Day2

一、继续完善登录框&#xff0c;当登陆成功时&#xff0c;关闭登陆页面&#xff0c;跳转到新的界面中 源码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug> //用于打印输出 #include <QIcon> …

iOS transform rotate总结

研究了一下transform的旋转设置&#xff0c;调了半天还以为是旋转写错了&#xff0c;发现是两个不同的view对象写错了&#xff0c;不管怎么说&#xff0c;还是记录一下旋转相关的操作吧。 参数都是弧度。 以一个图片来举例。 let img UIImageView.init() img.image UIImage…

Cesium态势标绘专题-集结地(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

Java的集合类:List、Set、Map

在 Java 中&#xff0c;集合类是一组有序或无序的数据元素的集合。Java 集合类可用于存储和操作各种数据类型的元素&#xff0c;如整数、字符串、对象等。集合类是动态的&#xff0c;可以在运行时根据需要调整其大小。 Java 集合类可以分为三类&#xff1a; List - 有序集合&…

如何判断某个视频是深度伪造的?

目录 一、前言 二、仔细检查面部动作 三、声音可以提供线索 四、观察视频中人物的身体姿势 五、小心无意义的词语 深造伪造危险吗&#xff1f; 一、前言 制作深度伪造视频就像在Word文档中编辑文本一样简单。换句话说&#xff0c;您可以拍下任何人的视频&#xff0c;让他…

Docker运行MySQL5.7

步骤如下&#xff1a; 1.获取镜像&#xff1a; docker pull mysql:5.7 2.创建挂载目录&#xff1a; mkdir /home/mydata/data mkdir /home/mydata/log mkdir /home/mydata/conf 3.先启动docker把配置文件拷贝出来&#xff1a; docker run -it --name temp mysql:5.7 /bi…

低代码和零代码有哪些区别?

低代码开发的概念 低代码开发是一种新兴的软件开发方法&#xff0c;其核心是通过使用图形用户界面和可视化建模工具&#xff0c;来减少编写代码的工作量和技能要求。低代码开发平台通常提供了丰富的预定义组件和模板&#xff0c;可以帮助开发人员快速构建应用程序。开发人员只…

性能测试之并发用户数的估计

在计算并发用户数之前&#xff0c;需要先了解2个概念。 并发用户&#xff1a;指的是现实系统中同时操作业务的用户&#xff0c;在性能测试工具中一般称为虚拟用户。并发用户这些用户的最大特征是和服务器产生了交互&#xff0c;这种交互既可以是单向的传输数据&#xff0c;也可…