将文件从一台服务器复制到另一台

问题描述:

我需要将文本文件从一台服务器复制到另一台服务器(两台服务器都是Linux)。 我如何在Java中做到这一点?将文件从一台服务器复制到另一台

+0

类型的服务器? ,服务器B可以使用HTTP访问服务器A的文件吗? – 2010-09-28 12:34:28

+1

你可以使用FTP吗?你的服务器在同一个网络上吗?你在使用共享文件系统吗?你可以部署一个Servlet吗?我认为我们需要更多的背景来回答。 – 2010-09-28 12:34:30

+0

你可以使用[scp](http://www.go2linux.org/scp-linux-command-line-copy-files-over-ssh),但是我想你自己实现之后,不是吗? – Patrick 2010-09-28 12:52:33

Easist如果你能使用apache commons-io:在FileUtils类有方便的方法来复制文件:

FileUtils.copyFileToDirectory(srcFile, targetDirectory); 

(如你谈到文本文件我想,你的应用程序同时访问文件系统)

+0

要求服务器A有一个本地安装的服务器B的目录? – aioobe 2010-09-28 12:38:08

+1

这样猜测。这个问题有点含糊 - 通常你有一个给定的接口(文件系统,FTP,Web服务,...),寻找帮助来实现/使用给定的编程语言(这里:Java)... – 2010-09-28 12:47:40

+0

好的答案( +1) – 2010-09-28 13:13:43

如果您需要从可访问文件系统复制文件,请使用Andreas' answer

如果您想要一个从下面的协议摘要的一般方法,请看Apache Commons VFS。它通过a number of protocols的可用资源的通用API:

  • FTP
  • 本地文件
  • HTTP和HTTPS
  • SFTP
  • 临时文件
  • 邮编,罐和焦油(未压缩的,TGZ或tbz2)
  • gzip and bzip2
  • res
  • RAM
  • 哑剧

几乎所有的Linux机器将其默认运行SSH服务器。因此,SCP将是您在它们之间复制文件的最佳选择。

使用像JSCH这样的SSH库来做到这一点。你会发现一个使用JSCH here进行SCP传输的教程。

如果你使用FTP,你可以使用Apache commons/net的FTPClient。

这里是供您参考示例代码:


FTPClient client = new FTPClient(); 
client.connect(host); 

if(FTPReply.isPositiveCompletion(client.getReplyCode())) { 
    if(client.login(username, password)) { 
    FileInputStream fis = new FileInputStream(localFilepath); 

    try { 
     if(client.storeFile(remoteFilename, fis)) { 
     System.out.println("File uploaded!"); 
     } 
    } 
    finally { 
     fis.close(); 
    } 
    } 
} 

如果你想要一个简单的方法,你的服务器支持PHP,我建议Rapid Transfer Script

只需将脚本上传到要复制文件的目录,输入要复制的文件的URL并点击转移。它在2分钟内复制了一个1.4GB的文件,为我节省了大量的时间和带宽。

我已经使用commons net FTP将文件从一台服务器传输到另一台服务器。

Maven的相关性:

<dependency> 
     <groupId>commons-net</groupId> 
     <artifactId>commons-net</artifactId> 
     <version>3.3</version> 
    </dependency> 

的Java:

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import org.apache.commons.net.ftp.FTP; 
import org.apache.commons.net.ftp.FTPClient; 


    public void tranferFile() { 

     FTPClient ftpClient = new FTPClient(); 
     try { 
      ftpClient.connect(servername, port); 
      ftpClient.login(username, password); 
      ftpClient.enterLocalPassiveMode(); 

      ftpClient.setFileType(FTP.BINARY_FILE_TYPE); 
      File sourceFile = new File("file which you want to send"); 
      InputStream inputStream = new FileInputStream(sourceFile); 

      boolean done = ftpClient.storeFile("filename which receiver get", inputStream); 
      inputStream.close(); 
      if (done) { 
       LOGGER.info("file is uploaded successfully.............."); 
      } 

     } catch (IOException e) { 
      LOGGER.error("Exception occured while ftp : "+e); 
     } finally { 
      try { 
       if (ftpClient.isConnected()) { 
        ftpClient.logout(); 
        ftpClient.disconnect(); 
       } 
      } catch (IOException e) { 
       LOGGER.error("Exception occured while ftp logout/disconnect : "+e); 
      } 
     } 

    } 
+0

你在哪里连接到另一台服务器?因为我只看到一个FTPClient连接。你能解释一下吗? – Sibtain 2017-10-17 05:21:40

+0

Sibtain嗨,servername是您的主机名或IP,并且端口将是您在服务器上运行的FTP端口和连接服务器的用户名/密码。 – ravi 2017-10-20 04:52:52