Jsch 重命名文件失败。

5
我正在使用Jsch通过SFTP上传大文件。在上传过程中,旧文件应该是可用的,因此我将其上传到临时文件并将其重命名为新文件。
final String tmpName = dest + "_tmp";
channel.put(source, tmpName);
channel.rename(tmpName, dest);

上传成功,但重命名失败:
ERROR: Failed to upload files
4: Failure
at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2491)
at com.jcraft.jsch.ChannelSftp.rename(ChannelSftp.java:1665)
    ...

我无法确定问题出在哪里,请帮忙。


你能发布更多细节吗?“dest”里面有什么?“dest”上设置了什么权限? - towe75
2个回答

8
目标文件已经存在。在重命名之前,请尝试删除现有的文件。

你说得对,在重命名之前删除目标文件是解决方案。谢谢! - Stephan
JSch不使用mv,它只是向SFTP服务器进程发送SFTP命令(该进程嵌入在ssh服务器中或由其调用)。该进程可能直接使用mv或相应的系统调用。 - Paŭlo Ebermann
看起来你是对的。我以为我在代码中看到了它,但显然我错了。这是代码:http://kickjava.com/src/com/jcraft/jsch/ChannelSftp.java.htm - Gijs Overvliet
这个类很难理解。我不知道它的实现原理。 - Stephan

0

我尝试过重命名,对我来说效果很好。有另一个文件与之相同,我试图将新文件重命名为现有文件,结果成功了。

因此,如果您想覆盖文件,则无需检查文件是否存在。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接