2012-03-05 73 views
2

我正在通過Jsch上傳SFTP的大文件。在上傳過程中,舊文件應該可用,因此我正在上傳到臨時文件並將其重命名爲新文件。Jsch重命名文件失敗

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) 
    ... 

我不能找出問題的所在。請幫助

+0

你可以發佈一些更多的細節?什麼在「dest」?在dest上設置了什麼權限? – tweber 2012-03-05 12:29:48

回答

5

目標文件已存在。嘗試在重命名之前刪除現有文件。

+0

你是對的,在重命名之前刪除目標文件是解決方案。謝謝! – Stephan 2012-03-05 13:05:16

+0

JSch不使用'mv',它只是將SFTP命令發送到sftp服務器進程(可以嵌入ssh服務器或由其調用)。這個過程可能直接使用'mv'或相應的系統調用。 – 2012-03-05 21:07:33

+0

看起來你是對的。我以爲我在代碼中看到過它,但顯然我錯了。以下是代碼:http://kickjava.com/src/com/jcraft/jsch/ChannelSftp.java.htm – 2012-03-08 10:12:00

0

我試過重命名,它對我來說工作得很好。還有另一個文件相同,我試圖將新文件重命名爲現有文件。它的工作。

因此,如果您要覆蓋,則無需檢查文件是否存在。