将文件从一台linux机器复制到另一台linux机器的Java代码

将文件从一台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

我想用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"+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世界中共享文件的方式。你有两个选择:

  • 或者通过连接两个文件系统,例如NFS(a 一种Unix文件共享),第二个文件系统 安装在第一个上,以便有一条路径将您引导到 第二台计算机的方式类似于Windows文件共享路径
  • 通过使用某种协议传输文件(FTP、RSYNC、, 等等)

  • 您应该使用类似于
    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”)