【问题标题】:Read a file from Linux Server through java program通过java程序从Linux Server读取文件
【发布时间】:2014-01-15 08:55:18
【问题描述】:

我的 Java 程序正在 Windows 机器上运行。在这台 Window 机器上,我需要从 Linux 服务器读取文件。 我已经编写了这段代码来通过 Linux 服务器进行身份验证,并且它工作正常

session = jsch.getSession("root", "ServerIP", 22);
            session.setConfig("StrictHostKeyChecking", "no");
            session.setPassword("Passwrod");
            session.connect();
            System.out.println("Server is connect");

我可以看到“服务器已连接”正在我的机器上打印,这意味着身份验证已通过服务器完成。 现在需要从这个服务器读取文件,我已经写了这段代码

try
            {
            File file = new File("/var/log//callrec/core1.log");
            LineNumberReader sc = new LineNumberReader(new FileReader(file));
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }

但它的抛出文件未找到异常。 任何人都可以指导我如何解决这个问题。

【问题讨论】:

  • 什么是jsch?而且,您仍然在代码中访问本地文件 - 只是通过某种机制创建会话并不意味着 File 类会自动访问远程机器上的文件
  • 它是一个用于身份验证的java库..
  • 你应该添加一个指向你正在使用的库的链接——我在下面的回答假设它是http://www.jcraft.com/jsch/,但这只是一个粗略的猜测......

标签: java linux file


【解决方案1】:

根据http://www.jcraft.com/jsch/examples/ScpFrom.java.html,你需要通过你的session对象在远程端执行一个命令,然后获取输入输出流与远程命令通信,通过这些读取文件元数据和内容渠道:

...
String command = "scp -f /var/log/callrec/core1.log";
Channel channel = session.openChannel("exec");
((ChannelExec)channel).setCommand(command);

OutputStream out = channel.getOutputStream();
InputStream in = channel.getInputStream();

channel.connect();

// Now use in and out to read the file, 
// see http://www.jcraft.com/jsch/examples/ScpFrom.java.html for a complete example
...

【讨论】:

  • Andreas 非常感谢您的回复....我已经尝试过您的方式..我已经编写了这段代码 BufferedReader reader = new BufferedReader(new InputStreamReader(in)); if (in!=null) { String str; while ((str = reader.readLine()) != null) { System.out.print(str); } } else { System.out.print("无行");但是我的程序在打印服务器连接后挂起你能帮帮我吗
【解决方案2】:

一旦您通过 SSH 登录,您的 Java 代码就不会神奇地在 Linux 服务器上下文中传输。因此,当您使用 Java 工具读取文件时,它会在您的本地计算机上搜索文件。

那么你至少有两种可能性:

1/ 从 Linux 服务器复制文件然后处理它。如果这是您发送的唯一命令,您可以更好地使用 SFTP 而不是 SSH (JSCH example here)

2/ 像您一样连接到 Linux 服务器,然后通过启动 cat myFile 命令并读取 SSH 会话的 outputStream 将文件流式传输回您的计算机

我的投票是第一种方法,它更干净。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 2012-12-30
    • 1970-01-01
    相关资源
    最近更新 更多