2010-09-28 19 views
5

Ho bisogno di copiare un file di testo da un server all'altro (entrambi i server sono Linux). Come posso farlo in Java?Copia file da un server a un altro

+0

tipo di server? , il server B può accedere al server A utilizzando HTTP? –

+1

Puoi usare FTP?I tuoi server sono sulla stessa rete? Stai usando un file system condiviso? Puoi distribuire un servlet? Penso che avremmo bisogno di più background per rispondere. –

+0

È * possibile * utilizzare [scp] (http://www.go2linux.org/scp-linux-command-line-copy-files-over-ssh), ma immagino che lo abbiate implementato da soli, no? – Patrick

risposta

3

easist se siete in grado di utilizzare apache commons-io: la classe FileUtils ha metodi convenienti per copiare i file:

FileUtils.copyFileToDirectory(srcFile, targetDirectory); 

(come lei ha parlato di testo file presumo, l'applicazione ha accesso ad entrambi di file sistemi)

+0

Richiederebbe che il server A abbia una directory del server B montata localmente? – aioobe

+1

Indovina. La domanda è alquanto vaga - di solito hai una determinata interfaccia (file system, ftp, webservice, ...) e cerchi aiuto per implementarla/usarla con un dato linguaggio di programmazione (qui: Java) ... –

+0

Buona risposta (+1) –

3

Se è necessario copiare file da file system accessibili, andare con Andreas' answer.

Se si desidera un approccio generale che estrae dal protocollo sottostante, dare un'occhiata a Apache Commons VFS. Esso fornisce un'API comune per le risorse disponibili attraverso a number of protocols:

  • FTP
  • file locali
  • HTTP e HTTPS
  • SFTP
  • File temporanei
  • Zip, Jar e Tar (non compresso, tgz o tbz2)
  • gzip e bzip2
  • res
  • ram
  • mimo
0

Quasi tutte le macchine Linux sarà avere server SSH in esecuzione per impostazione predefinita. Quindi SCP sarebbe la soluzione migliore per copiare i file tra loro.

Utilizzare una libreria SSH come JSCH per eseguire questa operazione. Troverai un tutorial per trasferire SCP usando JSCH here.

1

Se si utilizza FTP, è possibile utilizzare FTPClient da Apons Commons/Net.

Ecco alcuni codici di esempio per il vostro riferimento:


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

Se volete un modo semplice e il server supporta PHP, vi consiglio il Rapid Transfer Script.

Basta caricare lo script nella directory in cui si desidera copiare il file, immettere l'URL del file che si desidera copiare e fare clic su Trasferimento. Ha copiato un file da 1,4 GB in meno di 2 minuti e mi ha risparmiato un sacco di tempo e larghezza di banda.

0

Ho utilizzato il servizio di rete FTP per trasferire file da un server a un altro.

Maven Dipendenza:

<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

Dove ti connetti all'altro server? Perché vedo solo un FTPClient connesso. Puoi spiegare per favore? – Sibtain

+0

Sibtain Hi, servername è il nome host o IP e la porta sarà la porta FTP in esecuzione sul server e il nome utente/password per connettere il server. – ravi

Problemi correlati