Transferir archivos de windows hacia linux con clase java

Hola a todos, alguno puede ayudarme con esto?
Lo que necesito es transferir archivos pdf de windows hacia linux con una clase java.
Alguna idea de como hacerlo?

Saludos

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

socket / ftp

Si quieres hacerlo completamente con java, puedes utilizar sockets para transferencia de los archivos. También puedes apoyarte de un servidor FTP, la ventaja que tendrias es que cualquiera puede conectarse a tu repositorio de archivos (si le asignas privilegios) ya que hay bastantes clientes para este protocolo. Tambien puedes conectarte con java.

Imagen de Jeremias Rosales

Hola

Puedes indicarme algun ejemplo de como hacerlo completamente con Java?
He leido un poco acerca de sockets; pero sinceramente no lo he logrado asimilar completamente.

Ejemplos de sockets

Imagen de Jeremias Rosales

Jajaja

Ok, gracias. De verdad te lo agradezco. :P

Imagen de Jeremias Rosales

java.daba.do

Hola amigo, he investigado y conclui en esta clase:

*/

package transfer.ftp;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.SocketException;
import java.util.LinkedList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

/**
 *
 * @author jeremiasr
 */

public class TransferirArchivoFtp {

    final private static String ftpServidor = "servidor_ftp";
    final private static String ftpUsuario = "usuario";
    final private static String ftpClave = "clave";

    public static void main(String args[]) {
        FTPClient cteFtp = new FTPClient();
        File filePdf = new File("ruta_completa_mas_archivo_pdf");

        try {
            cteFtp.connect(ftpServidor);
            showServerReply(cteFtp);

            int replyCode = cteFtp.getReplyCode();

            if (!FTPReply.isPositiveCompletion(replyCode)) {
                System.out.println("Connect failed");
                return;
            }

            boolean conectar = cteFtp.login(ftpUsuario, ftpClave);
            System.out.println(cteFtp.printWorkingDirectory());
            //
            System.out.println(filePdf.getCanonicalPath());

            String[] command = {"chmod", "644", filePdf.getAbsolutePath(),};
            Runtime.getRuntime().exec(command);

            cteFtp.logout();
            cteFtp.disconnect();
        } catch (SocketException ex) {
            Logger.getLogger(TransferirArchivoFtp.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(TransferirArchivoFtp.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

Entonces, genere este error, se que es, la ruta desde donde ejecuto la clase es windows entonces el directorio de trabajo, aunque ya este conectado al ftp sigue siendo windows para la clase. La pregunta es ¿Como le hago para que el directorio de trabajo sea el de unix cuando ya este conectado al ftp?

05-27-2014 07:51:40 AM transfer.ftp.TransferirArchivoFtp main
GRAVE: null
java.io.IOException: Cannot run program "chmod": CreateProcess error=2, El sistema no puede encontrar el archivo especificado
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
        at java.lang.Runtime.exec(Runtime.java:593)
        at java.lang.Runtime.exec(Runtime.java:466)
        at transfer.ftp.TransferirArchivoFtp.main(TransferirArchivoFtp.java:50)
Caused by: java.io.IOException: CreateProcess error=2, El sistema no puede encontrar el archivo especificado
        at java.lang.ProcessImpl.create(Native Method)
        at java.lang.ProcessImpl.<init>(ProcessImpl.java:81)
        at java.lang.ProcessImpl.start(ProcessImpl.java:30)
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:453)
        ... 3 more
BUILD SUCCESSFUL (total time: 0 seconds)

FTP

¿Como le hago para que el directorio de trabajo sea el de unix cuando ya este conectado al ftp?
Edité tu código de ejemplo. Una vez que descargues los archivos podrás darle el procesamiento que necesites.

    public static void main(String args[]) {
        FTPClient ftpClient = new FTPClient();
        File filePdf = new File("ruta_completa_mas_archivo_pdf");

        try {
            ftpClient.connect(ftpServidor);

            int replyCode = ftpClient.getReplyCode();

            if (! (FTPReply.isPositiveCompletion(replyCode) && ftpClient.login(ftpUsuario, ftpClave))) {
                System.out.println("Connect failed");
                return;
            }

            // Si necesitas cambiar de directorio aqui es donde se define
            ftpClient.changeWorkingDirectory("carpeta");
            System.out.println(ftpClient.printWorkingDirectory());

            FTPFile[] ftpFiles = ftpClient.listFiles();

            for(FTPFile ftpFile : ftpFiles) {
                if (ftpFile.isDirectory()) continue;
                FileOutputStream output;
                // Aqui es donde guardas el archivo en tu carpeta local
                output = new FileOutputStream("/carpetalocal/" + ftpFile.getName());
                ftpClient.retrieveFile(ftpFile.getName(), output);
                output.close();

                // Puedes renombrar el archivo que has bajado
                //ftpClient.rename(ftpFile.getName(), "sync_" + ftpFile.getName());
                // O si prefieres puedes eliminarlo
                //ftpClient.deleteFile(ftpFile.getName());
            }

            // ... Ahora que tienes los archivos en tu carpeta local puedes hacer lo que quieras con ellos

            ftpClient.logout();
            ftpClient.disconnect();
        } catch (SocketException ex) {
            Logger.getLogger(TransferirArchivoFtp.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(TransferirArchivoFtp.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

Imagen de Jeremias Rosales

No funcionó

Hola, tratte de varias formas de hecharlo andar; pero no me funciono. Entonces me decidi a guardar el pdf en la base de datos, lo cual ya logre.. ahora tengo este problema... lo explico en el Deploy Java Application usando jar/Folder