2015-05-05 40 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]标签)。 –

相关问题