2016-08-03 9 views
-1

UNCパスでJARファイルを使用しようとすると、問題が発生しました。 java.io.fileのコンストラクタは、常にUNCファイルパスをローカルパスに変換します。 file:\dir1\dir2\file.jar!MyclassUNCファイルパスを処理するJava.io.fileコンストラクタ

は例えば、私はのような出力が得られます

String dirStr = "file:\\\\dir1\dir2\file.jar!Myclass"; 
File ff = new File(dirStr); 
System.out.println(ff.toString()); 

を試してみてください。しかし、私が期待しているのはfile:\\dir1\dir2\file.jar!MyClassです。

dirStrにスラッシュを追加しようとしましたが、機能しません。 java.io.fileでは、メソッドを呼び出して重複したスラッシュを削除するためです。

URIを使用してffを作成しようとしています。しかし、出力は\dir1\dir2\file.jar!Myclassになりますが、JARファイルを正常に使用することはできません。文字列\dir1\dir2\file.jar!Myclass!で終わる文字列を解析するには、JARの形式をfile:プロトコルで開始する必要があります。

​​のパス名はFile、つまりffのようになります(file:\\dir1\dir2\file.jar!MyClassなど)。

+0

'file:'接頭辞は、通常、ローカルパスに使用されると思います。 UNCパスはローカルパスではありません。 'file:'接頭辞なしで試してみてください。 '\\ dir1 \ dir2 \ file.jar!MyClass'です。また、スラッシュ「//dir1/dir2/file.jar!MyClass'を試すことができます – janos

+0

なぜ 'File'コンストラクタにURLを指定しなければならないと思いますか?あなたはすることはできません、あなたはする必要はありません。あなたが本当にここで何を求めているのか不明です。 – EJP

+0

UNCパスでJARファイルを使用する必要があるためです。 java CLASSPATHにリモートUNCパスが含まれている場合は、この問題が発生します。 'dirStr'のようなJARファイルを解析します。 –

答えて

0

あなたの入力dir文字列がUNC型なので、私はあなたがJavaのURIを使うべきだと思います。
例コード:

URI uri = new URI(dirStr); 
System.out.println(uri.toString()); // If you want to get the path as URI 
File ff = new File(uri.getPath()); // If you want to access the file. 


他のより良い方法のパスを使用している:

URI uri = new URI(dirStr); 
Path path = Paths.get(uri); // Or directly Path path = Paths.get(dirStr); 
File ff = path.toFile(); // << your file here 
path.toUri(); // << your uri path here 
+0

私はこのコードを試しましたが、 'ff'は' file: 'なしの' \\ dir1 \ dir2 \ file.jar!MyClass'のようになります。 –

+0

これで 'uri.toString()'に行きます。 – Minh

+0

サンプルコードを編集しましたので、ぜひご覧ください。 – Minh

0

パスではなく、URLをとりFile(String)コンストラクタ。 file:部分を削除し、コンパイラのエスケープ規則を満たすために、実際のファイル名に1つずつバックスラッシュを2つ使用します。または、スラッシュの正しい数を使用してください。

+0

実際、私はURLではなくURIを使用しました。 –

+0

'file:'を削除しても、JARファイルを見つけることができません。文字列 '.jar'の後に'! 'が1つあるためです。 –

+0

'file:'が必要な場合は、 'File'を使うべきではありません。私がすでに述べたように、2人は一緒に行かない。 – EJP

関連する問題