2010-09-28 18 views
5

Necesito copiar un archivo de texto de un servidor a otro (ambos servidores son Linux). ¿Cómo hago eso en Java?Copie el archivo de un servidor a otro

+0

tipo de servidor? , ¿puede el servidor B acceder al archivo del servidor A usando HTTP? –

+1

¿Se puede usar FTP?¿Sus servidores están en la misma red? ¿Estás usando un sistema de archivos compartidos? ¿Puedes implementar un servlet? Creo que necesitaríamos más antecedentes para responder. –

+0

* Puedes * usar [scp] (http://www.go2linux.org/scp-linux-command-line-copy-files-over-ssh), pero supongo que lo harás tú mismo, ¿no? – Patrick

Respuesta

3

easist si usted es capaz de utilizar apache commons-io: la clase FileUtils tiene métodos convenientes para copiar archivos:

FileUtils.copyFileToDirectory(srcFile, targetDirectory); 

(como usted habló de texto archivos Asumo, su aplicación tiene acceso a ambos archivos sistemas)

+0

¿Requeriría que el servidor A tenga un directorio del servidor B montado localmente? – aioobe

+1

Supongo que sí. La pregunta es algo vaga: generalmente tiene una interfaz determinada (sistema de archivos, ftp, servicio web, ...) y busca ayuda para implementarla/usarla con un lenguaje de programación dado (aquí: Java) ... –

+0

Buena respuesta (+1) –

3

Si necesita copiar archivos desde sistemas de archivos accesibles vaya con Andreas' answer.

Si desea un enfoque general que resuma del protocolo que se encuentra debajo, consulte Apache Commons VFS. Proporciona una API común para los recursos disponibles a través a number of protocols:

  • FTP
  • archivos locales
  • HTTP y HTTPS
  • SFTP
  • archivos temporales
  • Zip, tarro y alquitrán (sin comprimir, TGZ o tbz2)
  • gzip y bzip2
  • res
  • carnero
  • mimo
0

Casi todas las máquinas Linux va a tener servidor SSH corriendo por defecto. Entonces, SCP sería su mejor opción para copiar archivos entre ellos.

Utilice una biblioteca SSH como JSCH para hacer esto. Encontrará un tutorial para hacer una transferencia SCP usando JSCH here.

1

Si va con FTP, puede usar el FTPClient de Apache commons/net.

Éstos son algunos ejemplos de códigos para su referencia:


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

Si desea una manera fácil y su servidor soporta PHP, recomiendo el Rapid Transfer Script.

sólo subir el script en el directorio que desea copiar el archivo, introduzca la dirección URL del archivo que desea copiar y haga clic en Transferencia . Copió un archivo de 1,4 GB en menos de 2 minutos y me ahorró mucho tiempo y ancho de banda.

0

He utilizado commons net FTP para transferir archivos de un servidor a otro.

Maven Dependencia:

<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

¿Dónde se conecta al otro servidor? Porque solo veo un FTPClient conectado. ¿Puedes explicar por favor? – Sibtain

+0

Sibtain Hola, servername es su nombre de host o IP y el puerto será su puerto FTP ejecutándose en el servidor y nombre de usuario/contraseña para conectarse al servidor. – ravi

Cuestiones relacionadas