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

背景:需要把服务器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);
        }
    }
}

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 Java 中的 FTPClient 类来实现两台 FTP 服务器文件传输。具体实现方式可以参考以下步骤: 1. 创建 FTPClient 对象,并连接到源 FTP 服务器和目标 FTP 服务器。 2. 登录源 FTP 服务器和目标 FTP 服务器。 3. 切换到源 FTP 服务器的指定目录,并获取需要传输的文件列表。 4. 遍历文件列表,依次下载文件并上传到目标 FTP 服务器的指定目录。 5. 关闭 FTP 连接。 需要注意的是,传输过程中可能会出现网络异常等问题,需要进行异常处理和重试机制,以确保文件传输的稳定性和可靠性。 ### 回答2: 在Java中,可以使用相关的类和方法实现两台FTP服务器文件传输Java提供了一些FTP客户端库,例如Apache Commons Net库,可以方便地连接和操作FTP服务器。 首先,需要连接到两台不同的FTP服务器。可以使用FTPClient类的connect()方法分别连接到两个服务器。通过设置服务器的地址、端口号、用户名和密码来建立连接。连接成功后,可以使用FTPClient类的各种方法来操作服务器,例如上传文件、下载文件、删除文件等。 要从一个FTP服务器下载文件并上传到另一个FTP服务器,可以按照以下步骤进行操作: 1. 连接到第一个FTP服务器使用FTPClient的connect()方法连接到第一个FTP服务器。 2. 登录第一个FTP服务器使用FTPClient的login()方法登录到第一个FTP服务器,提供用户名和密码。 3. 设置被动模式:使用FTPClient的enterLocalPassiveMode()方法设置被动模式,以便与第一个FTP服务器进行数据传输。 4. 下载文件使用FTPClient的retrieveFile()方法从第一个FTP服务器下载文件到本地。 5. 连接到第二个FTP服务器使用FTPClient的connect()方法连接到第二个FTP服务器。 6. 登录第二个FTP服务器使用FTPClient的login()方法登录到第二个FTP服务器,提供用户名和密码。 7. 设置被动模式:使用FTPClient的enterLocalPassiveMode()方法设置被动模式,以便与第二个FTP服务器进行数据传输。 8. 上传文件使用FTPClient的storeFile()方法将文件上传到第二个FTP服务器。 9. 关闭连接:使用FTPClient的disconnect()方法关闭与两个FTP服务器的连接。 以上是简要的步骤,你可以根据具体情况进行调整和扩展。需要注意的是,传输过程中可能会出现一些异常情况,可以通过捕获和处理相关的异常来处理这些情况。 ### 回答3: 在Java使用FTP文件传输协议)进行文件传输需要以下步骤: 1. 导入必要的FTP库。 在Java中,可以使用Apache Commons Net库来处理FTP操作。需要将相关的jar文件导入到项目中。 2. 连接到FTP服务器使用FTPClient类对象连接到FTP服务器。通过设置服务器IP地址、端口号、用户名和密码,然后调用connect()方法建立连接。 3. 登录到FTP服务器使用登录凭据调用login()方法登录到FTP服务器。 4. 设置传输模式。 根据需要,可以设置FTP的传输模式为二进制传输或ASCII传输模式。可以使用setFileType()方法设置传输类型。 5. 进入指定目录。 如果需要进入服务器上的特定目录,可以使用changeWorkingDirectory()方法切换到相应的目录。 6. 开始上传或下载文件。 可以使用storeFile()方法上传文件服务器,或使用retrieveFile()方法从服务器下载文件。在调用这些方法之前需要先打开本地文件流和服务器文件流。 7. 关闭FTP连接。 在文件传输完成后,应该关闭FTP连接。可以使用disconnect()方法关闭FTP连接。 总结: 以上是使用Java进行两台FTP服务器文件传输的基本步骤。通过使用FTPClient类的各种方法,可以实现与FTP服务器文件上传和下载操作。在实际应用中,还需要考虑异常处理和错误处理,以确保文件传输的准确性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值