2010-09-28 228 views
5

我需要將文本文件從一臺服務器複製到另一臺服務器(兩臺服務器都是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

回答

3

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

3

如果您需要從可訪問文件系統複製文件,請使用Andreas' answer

如果您想要一個從下面的協議摘要的一般方法,請看Apache Commons VFS。它通過a number of protocols的可用資源的通用API:

  • FTP
  • 本地文件
  • HTTP和HTTPS
  • SFTP
  • 臨時文件
  • 郵編,罐和焦油(未壓縮的,TGZ或tbz2)
  • gzip and bzip2
  • res
  • RAM
  • 啞劇
0

幾乎所有的Linux機器將其默認運行SSH服務器。因此,SCP將是您在它們之間複製文件的最佳選擇。

使用像JSCH這樣的SSH庫來做到這一點。你會發現一個使用JSCH here進行SCP傳輸的教程。

1

如果你使用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(); 
    } 
    } 
} 
0

如果你想要一個簡單的方法,你的服務器支持PHP,我建議Rapid Transfer Script

只需將腳本上傳到要複製文件的目錄,輸入要複製的文件的URL並點擊轉移。它在2分鐘內複製了一個1.4GB的文件,爲我節省了大量的時間和帶寬。

0

我已經使用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

相關問題