将文件从一台linux机器复制到另一台linux机器的Java代码
我想用java编写一个程序,将一个文件从linux机器复制/创建到另一台linux/windows机器。 我尝试了下面的代码,它将在另一台windows计算机上创建一个文件将文件从一台linux机器复制到另一台linux机器的Java代码,java,copy,Java,Copy,我想用java编写一个程序,将一个文件从linux机器复制/创建到另一台linux/windows机器。 我尝试了下面的代码,它将在另一台windows计算机上创建一个文件 import java.io.File; import java.io.IOException; public class Example2 { public static void main(String[] args) { String path = "\\\\10.15.0.166"+Fi
import java.io.File;
import java.io.IOException;
public class Example2 {
public static void main(String[] args) {
String path = "\\\\10.15.0.166"+File.separator+"test";
String fname= path+File.separator+"Sample.pdf";
File file = new File(fname);
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Exists"+file.exists());
file.getParentFile().mkdirs();
}
}
它在一个窗口到另一个窗口之间工作。
但是当我在linux机器上尝试时,它正在linux机器上创建文件夹。
有谁能帮我解决这个问题吗?在Linux下,你不能用这种方式在另一台机器上创建文件。。。您正在使用Windows共享文件夹,这不是Linux世界中共享文件的方式。你有两个选择:
您应该使用类似于
FTP
的方法在unix机器之间移动文件
是一个很好的API
您将需要一些用户身份验证
以下是一个例子:
JSch jsch = new JSCH();
Session session = jsch.getSession(config.getUsername(), config.getHostname(), config.getPort()); //port is usually 22
session.setPassword(config.getPassword());
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp cFTP = (ChannelSftp) channel;
String sourceFile = "---", targetFile = "---";
cFTP.put(sourceFile , targetFile );
cFTP.disconnect();
session.disconnect();
要使用上述应用程序,我们必须在上述代码中再添加一行, session.put(“keychecking”、“no”);就在session.connect()之前; 完整的程序是
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;
import java.io.File;
public class test {
public static void main(String args[]) throws JSchException {
JSch jsch = new JSch();
Session session = jsch.getSession("user", "10.15.0.243", 22); //port is usually 22
session.setPassword("password1.");
session.put("StrictHostKeyChecking", "no");
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp cFTP = (ChannelSftp) channel;
jsch.setConfig("StrictHostKeyChecking", "no");
String sourceFile = "/home/divya/hi.txt", targetFile = "/home/user/test";
try {
cFTP.put(sourceFile , targetFile );
} catch (SftpException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
cFTP.disconnect();
session.disconnect();
}
}
问候
Divya您可以使用此代码段将文件复制到另一台linux机器
JSch jsch = new JSch();
Session session = null;
session = jsch.getSession("username","hostname",22);
session.setPassword("password");
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
ChannelSftp channel = null;
channel = (ChannelSftp)session.openChannel("sftp");
channel.connect();
File localFile = new File("localfilepath");
//If you want you can change the directory using the following line.
channel.cd(RemoteDirectoryPath)
channel.put(new FileInputStream(localFile),localFile.getName());
channel.disconnect();
session.disconnect();
有关更多详细信息,请访问类似帖子抱歉<代码>cFTP。更正。我尝试在linux的命令行中运行该程序,如下所示,但是获取编译错误找不到符号\n javac-cp.:/home/divya/jcsh-0.1.42.jar FileCopierOverNetwork.java FileCopierOverNetwork.java:1:package com.jcraft.jsch不存在import com.jcraft.jsch.Channel;^FileCopierOverNetwork.java:2:包com.jcraft.jsch不存在导入com.jcraft.jsch.ChannelSftp;^14 errors/home/divya/**jcsh-0.1.42.jar**您一定是错报了jar文件名。库应该是JSCH而不是**JCSHThanku。。。但是我在线程“main”com.jcraft.jsch.JSchException中运行pgm.Exception时出错:会话已关闭您知道为什么此异常再次出现问题吗。我错过了
会话。connect()代码>在创建频道之前调用。它可以工作:)@DRD会话中没有可用的put方法。而不是session.put(“strickhostkeychecking”,“no”)代码>我使用了session.setConfig(“StrictHostKeyChecking”,“no”)代码>