16

Apache Commons VFSを使用して、SFTP 経由で何かにアクセスしようとしています。SFTP をサポートしていると主張していますが、開始時にMalformedURLExceptionが発生しています。調べてみると、Apache vfs が を使用していることがわかりjava.net.URLます。sftp://ただし、ドキュメントによると、実際にはURLをサポートしていません。

次のプロトコルのプロトコル ハンドラは、検索パスに存在することが保証されています。

    http, https, ftp, file, and jar

追加のプロトコルのプロトコル ハンドラも利用できる場合があります。

LinuxでJava 1.6.0を使用しています。URLjava.net.URLを見たときにぐらつきをスローしないようにするにはどうすればよいですか? sftp://を使用する Apache commons VFS ライブラリを使い続ける必要がありますjava.net.URL

4

5 に答える 5

23

commons-vfs が sftp を機能させるために必要な依存関係のリストを参照してください。JSchがクラスパスに追加されると、例外は発生しなくなります。sftp 経由で接続する例については、 Apache の Wikiを参照してください。

于 2009-09-24T14:08:37.360 に答える
4

私はこれまでVFSを使用したことがありませんが、(少なくとも)SFTPを登録する必要があるようです 次のようなものが必要なようです。FileProvider

DefaultFileSystemManager fsm = ... /* Create and configure your FSM. */
fsm.addProvider("sftp", new SftpFileProvider());

おそらく、構成ファイルの構文を使用して同じことを行う方法があります。

于 2009-09-24T13:36:50.023 に答える
3

新しいURLプロトコルハンドラーを実装する方法については、この説明を参照してください(このドキュメントでは、LDAPの種類のURLについて説明していますが、sftpそれからスキームに一般化できるはずです)。

ドキュメントから:

ご覧のとおり、2つの例の唯一の違いは、2番目のケースではLDAPURLを使用したことです。ただし、LDAPサンプルを実行するには、最初にIAIK-JCEのLDAPプロトコルハンドラーを登録して、Java.netURLフレームワークにIAIK-JCEのLDAPサポートクラスを探す場所を指示する必要があります。

System.getProperties().put("java.protocol.handler.pkgs", "iaik.x509.net");

IAIK LDAPプロトコルハンドラーを登録した後、LDAP URLに対してurl.openConnectionを呼び出すと、IAIK-JCELdapURLConnectionオブジェクトが返されます。

(強調鉱山)

于 2009-09-24T13:32:07.453 に答える
2

私はjschを使用してsftpとsshを処理します。java.net.URLからの例外を防ぐのには役立ちませんが、sftpの処理には役立ちます。

于 2009-09-24T13:18:51.630 に答える
1

コードの構造によっては、URL解析メソッドに文字列を渡す前にsを削除してフラグを設定し、検証された場合はそのフラグを確認して、設定されている場合は元に戻すことができます。醜いですが、回避策を提供します。

于 2009-09-24T13:19:42.987 に答える