Java 将文件从一台 linux 机器复制到另一台 linux 机器的代码
Java code to copy files from one linux machine to another linux machine
我想编写一个程序,将 copy/create 一个文件从 linux 机器传输到 java 中的另一台 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"+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();
}
}
它在 WIndows 到 windows 期间有效。
但是当我从 linux 机器上尝试时,它正在 linux 机器本身中创建文件夹。
谁能帮我解决这个问题?
您无法在 Linux 下以这种方式在另一台计算机上创建文件...您正在使用 Windows 共享文件夹,这不是 [=21= 中共享文件的方式] 世界。您有两个选择:
- 要么通过连接两个文件系统,例如使用 NFS(a
一种 Unix 文件共享),第二个文件系统
安装在第一个上,这样一条路径将引导您到
第二台机器的方式类似于 Windows 文件共享路径。
- 通过使用某种协议来传输您的文件(FTP、RSYNC、
等)。
你应该使用类似 FTP
的东西在 unix 机器之间移动文件。
JSCH 是一个很好的 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("StrictHostKeyChecking", "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();
}
}
此致
迪维亚
您可以使用此代码片段将文件复制到另一台 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();
如需了解更多详情,请联系 THIS 类似 post
我想编写一个程序,将 copy/create 一个文件从 linux 机器传输到 java 中的另一台 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"+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();
}
}
它在 WIndows 到 windows 期间有效。 但是当我从 linux 机器上尝试时,它正在 linux 机器本身中创建文件夹。 谁能帮我解决这个问题?
您无法在 Linux 下以这种方式在另一台计算机上创建文件...您正在使用 Windows 共享文件夹,这不是 [=21= 中共享文件的方式] 世界。您有两个选择:
- 要么通过连接两个文件系统,例如使用 NFS(a 一种 Unix 文件共享),第二个文件系统 安装在第一个上,这样一条路径将引导您到 第二台机器的方式类似于 Windows 文件共享路径。
- 通过使用某种协议来传输您的文件(FTP、RSYNC、 等)。
你应该使用类似 FTP
的东西在 unix 机器之间移动文件。
JSCH 是一个很好的 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("StrictHostKeyChecking", "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();
}
}
此致
迪维亚
您可以使用此代码片段将文件复制到另一台 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();
如需了解更多详情,请联系 THIS 类似 post