1

このコードに従った

このエラーが発生しました。プログラムで行った唯一の変更は、引数を次のようにハードコーディングしたことです。

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  

サーバーのドメイン名がありません。私が持っているのは、IP /ユーザー名とパスワードがわかっているubuntuマシンだけです。私の仕事では、そのリモート Ubuntu マシンのファイルを削除する必要があります。

エラーを解決する方法を教えてください。

4

5 に答える 5

4

解決策は、resolveFile() を呼び出す前にユーザー名とパスワードを URL エンコードすることです。

したがって、次のようなものを呼び出す必要がある場合:

manager.resolveFile("sftp://sftpuser@Location:Test!@#$%^&*()[]:;@US456564/home57556");

ユーザー名は「sftpuser@Location」、パスワードは「Test!@#$%^&*[]:;:

ユーザー名とパスワードだけをエンコードして、次のように呼び出します。

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

Sting としては少し乱雑に見えるかもしれませんが、呼び出しコードには大きな問題はありません。

于 2014-03-14T08:23:28.943 に答える
3

pom ファイルにjschを追加すると、エラーが解決されます。

<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.50</version>
</dependency>
于 2016-06-02T03:13:23.347 に答える
0

pom への依存関係がありません。sshtools、jsch、および commons-net を含めて十分なはずです。

確信が持てなくて申し訳ありませんが、依存関係の問題です。

于 2012-08-06T13:53:58.647 に答える