通过java程序从Linux Server读取文件

时间:2014-01-15 08:55:18

标签: java linux file

我的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");

我可以看到“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();
            }

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

2 个答案:

答案 0 :(得分: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
...

答案 1 :(得分:0)

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

您至少有两种可能性:

1 /从Linux服务器复制文件然后处理它。如果它是您发送的唯一命令(JSCH example here

,则可以更好地使用SFTP而不是SSH

2 /像您一样连接到Linux服务器,然后通过发送cat myFile命令并读取SSH会话的outputStream

将文件流回到您的计算机

我的投票将是第一种方法,它更清洁。