有什么方法可以锁定文件(我正在使用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();
}
而不是锁定文件(这可能会对您建议更改文件的任何应用程序产生不利影响,并且假定您具有ssh访问权限和许可权,因此您可以使用ssh命令将文件复制到临时文件中(如果在'nix系统:'cp / some / file / / some / temp / file /'),这比通过scp传输要快得多。 (有关执行示例,请参见http://www.jcraft.com/jsch/examples/Exec.java.html)。从那里,scp-获取临时文件。最后,如有必要,通过另一个JSch exec命令删除临时文件。
此时的Jsch supports version 3 of the SFTP protocol。 The wikipedia page包含指向该协议的不同版本的链接。版本3为here,并且“ lock”一词未出现在其中的任何位置。换句话说,该协议不支持锁定,因此Jsch没有任何支持。
SFTP版本5和6确实包含对锁定远程文件的支持。但是,Jsch不支持这些协议版本。
[我将补充说OpenSSH是使用最广泛的SSH / SFTP服务器,仅支持SFTP版本3。您必须使用其他服务器软件才能进行文件锁定。