有没有办法锁定文件,我正在阅读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();
}
答案 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 protocol。 The wikipedia page包含指向协议不同版本的链接。版本3是here,而单词" lock"不会出现在其中的任何地方。换句话说,该协议不支持锁定,因此Jsch无需支持。
SFTP版本5和6确实包含支持锁定远程文件。但是,Jsch不支持这些协议版本。
我补充说,OpenSSH是最广泛使用的SSH / SFTP服务器,它只支持SFTP版本3.您必须使用其他一些服务器软件来做文件的任何希望锁。