Java程序无法从Linux服务器远程读取文件

时间:2014-01-16 07:06:11

标签: java linux inputstream remote-server

我想通过我的java程序从Linux服务器远程访问文件。我已经编写了这段代码,但它无法正常工作。

public static void main(String arg[]) throws FileNotFoundException
    {
        JSch jsch = new JSch();
        Session session = null;
        BufferedReader br = null;
        try {
            session = jsch.getSession("root", "IPServer", 22);
            session.setConfig("StrictHostKeyChecking", "no");
            session.setPassword("Password");
            session.connect();
            System.out.println("Server is connect");
            try
            {
                String command = "scp -f /var/log/callrec/core1.log";
                Channel channel = session.openChannel("exec");
                ((ChannelExec)channel).setCommand(command);

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

                channel.connect();

                br = new BufferedReader(new InputStreamReader(in));

                StringBuilder sb = new StringBuilder();

                String line;
                while ((line = br.readLine()) != null) {
                    System.out.println(line);
                }

                System.out.println("\nDone!");
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
            session.disconnect();
        } catch (JSchException e) {
            e.printStackTrace();  
    //    } catch (SftpException e) {
     //       e.printStackTrace();
        }
    }

我的程序没有抛出任何错误,我可以在我的控制台上看到“server is connect”消息,然后它被绞死而没有提供任何其他输出而且它没有终止....

1 个答案:

答案 0 :(得分:1)

首先检查是否可以通过ssh使用相同的参数从shell连接到此服务器。您将消除网络问题变体。例如,linux服务器可能会拒绝远程root登录。

然后,一旦你的程序挂起,登录到这个linux服务器并运行who命令,看看你的java程序是否成功登录。或者,如果scp命令正在运行,您可以运行 ps -afx 命令查看。或者更好地从Java而不是scp执行 touch / var / tmp / java-test 命令。然后 ls 会告诉您,如果您在此服务器上成功执行了来自java的远程命令。

我希望这能帮助你找到原因。