我的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();
}
但它的抛出文件未找到异常。 任何人都可以指导我如何解决这个问题。
答案 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
我的投票将是第一种方法,它更清洁。