JSch,打开会话时锁定文件

问题描述 投票:0回答:2

有什么方法可以锁定文件(我正在使用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();
}
java ssh jsch
2个回答
1
投票

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


1
投票

此时的Jsch supports version 3 of the SFTP protocolThe wikipedia page包含指向该协议的不同版本的链接。版本3为here,并且“ lock”一词未出现在其中的任何位置。换句话说,该协议不支持锁定,因此Jsch没有任何支持。

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

[我将补充说OpenSSH是使用最广泛的SSH / SFTP服务器,仅支持SFTP版本3。您必须使用其他服务器软件才能进行文件锁定。

© www.soinside.com 2019 - 2024. All rights reserved.