【问题标题】:Remote File Transfer from one linux machine to another linux machine从一台 linux 机器到另一台 linux 机器的远程文件传输
【发布时间】:2013-05-17 05:23:59
【问题描述】:

嗨,我想在 Linux 机器上编写一个 java 程序,它应该读取另一台远程 Linux 机器上的文件并将其内容复制到源机器。我正在使用以下代码

  JSch jsch = new JSch();
  Session session = jsch.getSession(user, host, port);
  session.setPassword(password);
  session.setConfig("StrictHostKeyChecking", "no");
  System.out.println("Establishing Connection...");
  session.connect();
  System.out.println("Connection established.");
  System.out.println("Crating SFTP Channel.");
  ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
  sftpChannel.connect();
  System.out.println("SFTP Channel created.");
  InputStream out = null; //.get(remoteFile);
  out = sftpChannel.get(pub);
  System.out.println("Read Successful");
  System.out.println(pub);
  StartString = pub.split("/");
  i=StartString.length;
  fileName =LocalWrite+StartString[i-1];
  System.out.println(fileName);   
  OutputStream fileOut = new FileOutputStream(new File(fileName));
  byte[] buf = new byte[1024];
  int len;
  while ((len = out.read(buf)) > 0) {
    fileOut.write(buf, 0, len);
  }
  System.out.println("Wrote Successfull");
  out.close();
  fileOut.close();
  sftpChannel.disconnect();
  session.disconnect();`

当我尝试这个时,我得到一个 fileNotFound 异常,但是当我在 Windows 机器中尝试相同的代码时,我能够读取文件并将其内容复制到我的本地机器。你能告诉我我在哪里做错了吗?

【问题讨论】:

  • 行“InputStream out = null;”让我觉得变量名的选择非常糟糕,但这不是你的问题。您使用的文件名是什么?我会怀疑大写/小写问题。
  • 或者你可以在命令行调用scp。
  • @AgilePro 我指定了与输入完全相同的文件名。
  • scp 在所有操作系统上的工作方式都是一样的,但您必须假设它已安装并且可能没有。
  • 这段代码有调试语句。关心包括他们实际产品的样本吗? StartString (是一个变量)并且它没有被声明。我假设一个字符串数组,但我真正的意思是不包括完整的、可编译的和可运行的代码。您正在搜索斜杠字符,这可能是特定于操作系统的,但由于没有给出实际的真实样本值,我们并不知道。制作一个完整的可编译和可运行的类,你可能会得到一些帮助。

标签: java linux


【解决方案1】:

没有更多信息很难说。一个疯狂的猜测(在 cmets 中建议):您是否为 Linux 系统使用了正确的路径名(与 Windows 上的名称不同)?有注意大小写吗?

要进一步调试,您可以在目标 Linux 系统上以调试模式运行 sshd(SSD 守护程序)。然后尝试连接,看看是什么文件名到达目标系统,为什么找不到。

【讨论】:

  • 嗨@sleske,我确保所有命名约定都相同,并且文件在指定位置可用。您已要求提供更多信息,您能否建议我还可以为您提供什么来解决此问题
  • 好吧,首先尝试按照我的建议在调试模式下运行 sshd。
【解决方案2】:

您好,问题已解决。这两台机器位于不同的网络中,因此上面的代码不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多