2012-07-22 41 views
5

私は新しいAndroidプロジェクトでJCIFSを使用しています。どういうわけか、URLクラスを使用してファイルパスを一般化することにしました(後でプロトコルを追加できるようになりました)。私がしたことは以下の通りですAndroidでJCIFSライブラリを使用しているときにURLでSMBプロトコルを使用しています

URL url = new URL("smb://192.168.1.1/filepath"); 

そして、java.net.MalformedURLException例外がスローされます。

Exception in thread "main" java.net.MalformedURLException: unknown protocol: smb 
    at java.net.URL.<init>(URL.java:184) 
    at java.net.URL.<init>(URL.java:127) 

コンサルティングJCIFS FAQは、クラスを使用する前にプロトコルを登録する必要があることを示しています。しかし、私はAndroidでそうする方法を本当に知りません。私はライブラリがこれをすでにやっていると思うが、それはAndroidではない。

どうすればよいですか?

+0

jcifs Jarファイルはどこに配置しましたか?ハンドラがロードされる適切なクラスパスに存在する必要があります。 – medopal

+0

私はjarファイルをプロジェクトの/ libsディレクトリに置いています。これはクラスパスにないと思います。 Androidは通常のJavaアプリケーションとは違ってクラスパスを処理すると思います。 –

答えて

0

URLオブジェクトを使用しないでください。 URLをSmbFileコンストラクタに直接渡します。たとえば、

SmbFile file = new SmbFile("smb://192.168.1.1/filepath"); 

通常のファイルでできることはほとんどすべて実行できます。

+0

URLオブジェクトを使用している理由は他のプロトコル(およびローカルファイルシステム)もサポートしたいからです。 URLを使用すると、プロトコル間で抽象的になります。また、私はSerilizableオブジェクトを使用して、SmbFileではないActivities間を渡したいと思います。 –

+0

いいですね、あなたがそれを理解してうれしいです! – 11101101b

5

私は、SmbFileリファレンスのJCIFSリファレンスの使用法を見てきました。

「SMB://」でのjava.net.URLクラスを使用する場合のURL、それは最初の静的jcifs.Config.registerSmbURLHandlerを(呼び出すこと 必要です)。方法。 これは、SMBプロトコルハンドラを登録するために必要です。

この呼び出しを追加すると、正しく動作します。

+0

Javadoc:[http://stderr.org/doc/libjcifs-java-doc/api/jcifs/Config.html#registerSmbURLHandler()](http://stderr.org/doc/libjcifs-java-doc/api) /jcifs/Config.html#registerSmbURLHandler()) –

+0

前のリンクは使用できません。代わりにhttps://jcifs.samba.org/src/docs/api/jcifs/Config.html#registerSmbURLHandler%28%29を使用してください – jneira

関連する問題