如何将文件从目录A移动到远程服务器中的目录B?
我正在使用JSch连接到由GWT制作的网站中的SFTP。 我读过sftpChannel.get()
, sftpChannel.rename()
, sftpChannel.rm()
一个小例子。
但我没有找到将文件从远程服务器复制到远程服务器b
目录的解决方案。
例如,我想将文件从/appl/user/home/test/temp
复制到/appl/user/home/test/
。 Filename = 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/
并删除/appl/user/home/test/
中的abc.jpg
。
我该怎么办?
好像是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 ); }
核心SFTP协议不支持复制远程文件。
有协议的copy-file
扩展草案,但只有少数SFTP服务器支持(例如ProFTPD / mod_sftp和Bitvise SFTP服务器)。
JSch库也不支持copy-file
扩展名。
备择方案:
- 如果您具有shell访问权限,请打开“exec”通道,并使用shell
cp
命令(或服务器操作系统的等效命令)。
请参阅Exec.java
示例 。 - 否则,您唯一的选择是将文件下载到本地临时位置,并将其副本上载回另一个/目标远程目录。 或者使用流,以避免临时文件,如@KushalShukla的回答中所建议的那样 。
另请参阅如何使用SFTP将文件复制/复制到另一个目录?
您可以编写一个普通的Java FileInputStream
和FileOutputStream
代码,而不是使用像这样的路径/appl/user/home/test/temp
使用完整路径及其IpAddress或远程服务器名称+您的路径,例如myremoteserver/appl/user/home/test/temp