Comment envoyer un fichier (déplacer/copier) d'un ordinateur Windows vers un serveur à l'aide de java


Je veux copier certains fichiers de mon ordinateur vers un emplacement serveur.

Mon ordinateur fonctionne sous Windows-7. Mes fichiers sont stockés dans :

C:\Transfer\

L'emplacement du serveur où je dois transférer les fichiers est:

\\server1\myname\TransferData\

Je veux le faire en utilisant Java. J'ai essayé quelques commandes comme cela sur mon invite de commande :

pushd \\server1\myname\TransferData\
Z:\> mv C:\Transfer\* Z:\

Pour une raison quelconque, cela fonctionne manuellement et ne fonctionne PAS via java. Je reçois IOException.

Code Java que j'ai utilisé :

Process proc = Runtime.getRuntime().exec("pushd \\server1\myname\TransferData\");
proc.waitFor();
// once this server location gets mounted - i was thinking of moving the file. that part works through java.

L'erreur que j'obtiens est la suivante:

Exception in thread "main" java.io.IOException: Cannot run program "pushd": CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at com.data.Main.main(Main.java:34)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)

J'ai aussi essayé ceci :

Process proc = Runtime.getRuntime().exec("cmd pushd \\server1\myname\TransferData\");
proc.waitFor();

&

Process proc = Runtime.getRuntime().exec("cmd \c pushd \\server1\myname\TransferData\");
proc.waitFor();

&

Process proc = Runtime.getRuntime().exec("cmd.exe pushd \\server1\myname\TransferData\");
proc.waitFor();

Ce qui précède ne lève pas d'exception. Et ne monte pas non plus l'emplacement du serveur sur mon ordinateur.

J'ai un accès en écriture sur le serveur. J'ai vraiment besoin d'une solution à mon problème. Grâce.

Author: sudhishkr, 2015-01-09

1 answers

Pourquoi ne pas utiliser JSCH? J'ai réussi à transférer des fichiers d'un ordinateur Windows vers une machine Linux. En fait, je cherchais l'inverse quand je suis venu ici. Vous pouvez utiliser le programme ci-dessous:

            import com.jcraft.jsch.Channel;
            import com.jcraft.jsch.ChannelSftp;
            import com.jcraft.jsch.JSch;
            import com.jcraft.jsch.JSchException;
            import com.jcraft.jsch.Session;
            import com.jcraft.jsch.SftpException;

            public class FileTransfer {
                public static void main(String args[]) {
                    String hostname = "";
                    String username = "";
                    String password = "";
                    String copyFrom = "";
                    String copyTo = ""; 
                    JSch jsch = new JSch();
                    Session session = null;
                    System.out.println("Trying to connect.....");
                    try {
                        session = jsch.getSession(username, hostname, 22);
                        session.setConfig("StrictHostKeyChecking", "no");
                        session.setPassword(password);
                        session.connect(); 
                        Channel channel = session.openChannel("sftp");
                        channel.connect();
                        ChannelSftp sftpChannel = (ChannelSftp) channel; 
                        sftpChannel.get(copyFrom, copyTo);

                        sftpChannel.exit();
                        session.disconnect();
                        System.out.println("Done !!");
                    } catch (JSchException e) {
                        e.printStackTrace();  
                    } catch (SftpException e) {
                        e.printStackTrace();
                    }

                }
            }
 1
Author: nEO, 2015-03-17 06:05:11