如何使用 java 从 windows 计算机向服务器发送文件 (move/copy)
How to send a file (move/copy) from windows computer to server using java
我想将一些文件从我的计算机复制到服务器位置。
我的电脑运行的是 Windows-7。我的文件存储在 :
C:\Transfer\
我必须传输文件的服务器位置是:
\server1\myname\TransferData\
我想使用 Java 执行此操作。我在命令提示符下尝试了一些这样的命令:
pushd \server1\myname\TransferData\
Z:\> mv C:\Transfer\* Z:\
出于某种原因,这在手动完成时有效并且不适用于 java。我得到 IOException。
Java 我一直在使用的代码:
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.
我得到的错误是:
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)
我也试过这个:
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();
上面没有抛出异常。也不会将服务器位置挂载到我的计算机上。
我在服务器上有写入权限。我真的需要解决我的问题。谢谢
为什么不用JSCH?我已经成功地将文件从 Windows 台计算机传输到 Linux 台计算机。事实上,当我来到这里时,我正在寻找相反的方向。您可以使用以下程序:
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();
}
}
}
我想将一些文件从我的计算机复制到服务器位置。
我的电脑运行的是 Windows-7。我的文件存储在 :
C:\Transfer\
我必须传输文件的服务器位置是:
\server1\myname\TransferData\
我想使用 Java 执行此操作。我在命令提示符下尝试了一些这样的命令:
pushd \server1\myname\TransferData\
Z:\> mv C:\Transfer\* Z:\
出于某种原因,这在手动完成时有效并且不适用于 java。我得到 IOException。
Java 我一直在使用的代码:
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.
我得到的错误是:
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)
我也试过这个:
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();
上面没有抛出异常。也不会将服务器位置挂载到我的计算机上。
我在服务器上有写入权限。我真的需要解决我的问题。谢谢
为什么不用JSCH?我已经成功地将文件从 Windows 台计算机传输到 Linux 台计算机。事实上,当我来到这里时,我正在寻找相反的方向。您可以使用以下程序:
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();
}
}
}