2012-06-25 68 views
0

Followed this codeSFTP拋出異常,說無效的絕對URI

我得到這個錯誤,我在節目中所做的唯一的變化是我硬編碼參數作爲

String hostName = "122.183.217.133" ; 
String username = "root"; 
String password = "something"; 
String localFilePath = "C://Sample.jpg"; 
String remoteFilePath = "/var/www/html/intranetupload/uploads/Sample.jpg"; 

Jun 25, 2012 2:52:18 PM org.apache.commons.vfs2.VfsLog info 
INFO: Using "C:\DOCUME~1\MEENAK~1.DCK\LOCALS~1\Temp\vfs_cache" as temporary files store. 
Exception in thread "main" java.lang.RuntimeException: org.apache.commons.vfs2.FileSystemException: Invalid absolute URI "sftp://root:***@122.183.217.133:22/var/www/html/intranetupload/uploads/Sample1.jpg". 
    at sftp.sample.Main.delete(Main.java:120) 
    at sftp.sample.Main.main(Main.java:36) 
Caused by: org.apache.commons.vfs2.FileSystemException: Invalid absolute URI "sftp://root:***@122.183.217.133:22/var/www/html/intranetupload/uploads/Sample1.jpg". 
    at org.apache.commons.vfs2.provider.AbstractOriginatingFileProvider.findFile(AbstractOriginatingFileProvider.java:61) 
    at org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:693) 
    at org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:621) 
    at sftp.sample.Main.delete(Main.java:111) 
    ... 1 more 
Caused by: org.apache.commons.vfs2.FileSystemException: Expecting/to follow the hostname in URI "sftp://root:***@122.183.217.133:22/var/www/html/intranetupload/uploads/Sample1.jpg". 
    at org.apache.commons.vfs2.provider.HostFileNameParser.extractToPath(HostFileNameParser.java:155) 
    at org.apache.commons.vfs2.provider.URLFileNameParser.parseUri(URLFileNameParser.java:50) 
    at org.apache.commons.vfs2.provider.AbstractFileProvider.parseUri(AbstractFileProvider.java:188) 
    at org.apache.commons.vfs2.provider.AbstractOriginatingFileProvider.findFile(AbstractOriginatingFileProvider.java:57) 
    ... 4 more 

我不沒有服務器的域名。我所擁有的是一臺ubuntu機器,其IP /用戶名和密碼是已知的。 我的工作需要刪除該遠程Ubuntu機器中的文件。

你能幫我解決這個錯誤嗎?

+0

您是否使用與本教程中完全相同的代碼? – AlexS

+0

是的。除了硬編碼的論點。我使用了相同的 – Meenakshi

回答

0

你錯過了對你的pom的依賴。 它應該足夠包括:sshtools,jsch和commons-net。

對不起,我不能確定,但​​這是一個依賴關係問題。

2

解決的辦法是在調用resolveFile()之前對Url進行用戶名和密碼編碼。

所以,如果你需要調用是這樣的:

manager.resolveFile("sftp://[email protected]:[email protected]#$%^&*()[]:;@US456564/home57556"); 

當用戶名是 「sftpuser @位置」,密碼爲「測試@#$%^ & * []:;:

您剛纔編碼的用戶名和密碼,並調用它。

manager.resolveFile("sftp://sftpuser%40Location:Test!%40%23%24%25%5E%26*%5B%5D%3A%[email protected]/home57556"); 

它看起來有點亂作爲斯汀但在調用代碼沒有太大的問題

0

通過在您的pom文件中添加jsch,錯誤將被解決。

<dependency> 
    <groupId>com.jcraft</groupId> 
    <artifactId>jsch</artifactId> 
    <version>0.1.50</version> 
</dependency>