2015-05-05 38 views
2

我正在使用JSch連接到由GWT製作的網站中的SFTP。 我讀過的sftpChannel.get()sftpChannel.rename()一個小例子,sftpChannel.rm()如何將文件從目錄A移動到遠程服務器中的目錄B?

但是我沒有發現,從遠程服務器a目錄中的文件複製到遠程服務器b目錄中的一個解決方案。

例如,我想將文件從/appl/user/home/test/temp複製到/appl/user/home/test/。文件名= abc.jpg

我在這裏呆了幾個小時,因爲大多數網絡解決方案都是從遠程服務器獲取文件到本地,或者從本地文件上傳到遠程服務器。

String existingfile = "abc.jpg"; 
String newfile = "123.jpg"; 
FileDirectory = "/appl/user/home/test/"; 
sftp.cd(FileDirectory+"temp/"); 
sftp.rename(newfile, FileDirectory+newfile); 

比方說,abc.jpg是存在於/appl/user/home/test/

我在/appl/user/home/test/temp/上傳123.jpg

現在,我想將123.jpg移動到/appl/user/home/test/並刪除abc.jpg/appl/user/home/test/

我該怎麼辦?

+0

我編輯了編碼,你能幫我解決問題嗎? 我知道我可以通過命令刪除abc.jpg:sftp.cd(FileDirectory); sftp.rm(abc.jpg的); 但是如何複製123。jpg從/ appl/user/home/test/temp到/ appl/user/home/test? 我不知道解決方案,因爲我不能使用sftp.cp函數,因爲它不存在。 – Jbisgood9999999

+0

你使用的是JSch庫嗎? –

+0

因此,您可以將遠程文件移動到另一個目錄或將其複製到另一個目錄?你說「複製」。但是在你的問題結尾處的描述看起來像是一個「舉動」。 –

回答

4

好像SftpChannel.rename();需要使用的文件,我要移動的目錄文件的完整路徑,而不是CD。

String existingfile = "abc.jpg"; 
String newfile = "123.jpg"; 
FileDirectory = "/appl/user/home/test/"; 
sftp.cd(FileDirectory+"temp/"); 
if (sftp.get(newfile) != null){ 
    sftp.rename(FileDirectory + "temp/" + newfile , 
     FileDirectory + newfile); 
    sftp.cd(FileDirectory); 
    sftp.rm(existingfile); 
} 
0

你可以寫一個普通的Java FileInputStreamFileOutputStream代碼,而不是使用像它的Ip地址或這些/appl/user/home/test/temp使用完整路徑遠程服務器名稱+您的路徑如路徑myremoteserver/appl/user/home/test/temp

+0

但我不想讓文件傳輸到客戶端。我的SFTP服務器位於Unix,所以它是絕對路徑。 FileInputStream和FileOutputStream是不是將文件從SFTP製作到本地(客戶端)? 我想我不應該從SFTP(服務器端)到客戶端,然後再SFTP的文件。 – Jbisgood9999999

0

核心SFTP協議不支持複製一個遠程文件。

有草案copy-file extension to the protocol,但只有少數SFTP服務器(例如ProFTPD/mod_sftp和Bitvise SFTP服務器)支持。

JSch庫不支持copy-file擴展。

替代方案:

  • 如果你有shell訪問,打開一個「執行」通道,並使用shell命令cp(或等效的命令爲您的服務器的操作系統)。
    Exec.java example
  • 否則,您唯一的選擇是將文件下載到本地臨時位置,並將其副本上載回不同的/目標遠程目錄。或使用流,以避免臨時文件,如an answer by @KushalShukla中所建議的。

參見How can I copy/duplicate a file to another directory using SFTP?

+0

是的,我正在使用JSch。 我可以知道如何使編碼突出顯示嗎?提問時我只知道4個空格。 '代碼'? 在[如何使用SFTP將文件複製/複製到另一個目錄?](http://stackoverflow.com/questions/28089821/how-can-i-copy-duplicate-a-file-to-another -directory-using-sftp),'Alternatives:', 由於它是一個帶SFTP功能的GWT,如果用戶需要使用其他工具來執行此操作,則這是沒有意義的。 因爲我使用JSch,所以唯一的解決方案是將文件複製到本地並複製回SFTP服務器? 哦否:( – Jbisgood9999999

+0

您的問題中的代碼突出顯示(通過[tag:java]標籤)。 –

相關問題