0

unix ディレクトリにファイルがあり、その内容を読み取ってページに表示する必要があります。Java コードで jcraft ライブラリを使用しています。Unix サーバーに接続してファイルを見つけることはできますが、読み取ることができません。ファイルを読み取るためのサンプル コードを見つけましたが、機能していません。int c = in.read() 行で停止し、おそらくループでスタックしています... コードを投稿しています。問題が見つかる可能性があります。それを行う他の(より良い)方法があれば、例をいただければ幸いです。私の質問とサンプルコードが十分に明確であることを願っています。皆さんありがとう。

public String readFile(String path) throws Exception {

    ChannelExec c = (ChannelExec)session.openChannel("exec");
    OutputStream os = c.getOutputStream();
    InputStream is = c.getInputStream();
    c.setCommand("scp -f " + path); //path is something like /home/username/sample.txt
    c.connect();
    String header = readLine(is);

    int length = Integer.parseInt(header.substring(6, header.indexOf(' ', 6)));
    os.write(0);
    os.flush();

    byte[] buffer = new byte[length];
    length = is.read(buffer, 0, buffer.length);
    os.write(0);
    os.flush();

    c.disconnect();

    return new String(buffer);  
}

private String readLine(InputStream in) throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    for (;;) {
        int c = in.read(); // code stops working here
        if (c == '\n') {
            return baos.toString();
        } else if (c == -1) {
            throw new IOException("End of stream");
        } else {
            baos.write(c);
        }
    }
}
4

2 に答える 2

1

ChannelSftpの代わりに使用することを検討したいChannelExec

ChannelSftp channelSftp = null;
try {
    channelSftp = (ChannelSftp) session.openChannel("sftp");
    channelSftp.connect();
    is = channelSftp.get(path);
    // read the contents, etc...
} finally {
    if (channelSftp != null) {
        channelSftp.exit();
    }
}
于 2013-05-28T17:47:22.220 に答える