JSch,会话打开时锁定文件

时间:2015-03-29 15:47:42

标签: java ssh jsch

有没有办法锁定文件,我正在阅读JSch sftp频道,以防止其他应用程序在会话打开时修改它?

我遇到的问题:当我正在读/写文件时,其他一些应用程序会更改文件并导致错误。

目前我正在以这种方式阅读文件:

ChannelSftp sftp = (ChannelSftp) session.openChannel("sftp");

InputStream stream = sftp.get("/some/file");
try {
    BufferedReader br = new BufferedReader(new InputStreamReader(stream));
    // read from br
} finally {
    stream.close();
}

2 个答案:

答案 0 :(得分:1)

而不是锁定文件(这可能会对您建议更改文件的任何应用程序产生负面影响),并假设您具有ssh访问权限和权限,您可以使用ssh命令将文件复制到临时文件中(如果在一个&nbsp系统:' cp / some / file / / some / temp / file /'),它们很可能比通过scp传输快得多。 (有关exec示例,请参阅http://www.jcraft.com/jsch/examples/Exec.java.html)。从那里,scp-获取临时文件。最后,如有必要,通过其他JSch exec命令删除临时文件。

答案 1 :(得分:0)

Jsch此时supports version 3 of the SFTP protocolThe wikipedia page包含指向协议不同版本的链接。版本3是here,而单词" lock"不会出现在其中的任何地方。换句话说,该协议不支持锁定,因此Jsch无需支持。

SFTP版本56确实包含支持锁定远程文件。但是,Jsch不支持这些协议版本。

我补充说,OpenSSH是最广泛使用的SSH / SFTP服务器,它只支持SFTP版本3.您必须使用其他一些服务器软件来做文件的任何希望锁。

相关问题