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= 中共享文件的方式] 世界。您有两个选择:

  1. 要么通过连接两个文件系统,例如使用 NFS(a 一种 Unix 文件共享),第二个文件系统 安装在第一个上,这样一条路径将引导您到 第二台机器的方式类似于 Windows 文件共享路径。
  2. 通过使用某种协议来传输您的文件(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