Java:java.net.URL#getFile()は使い物にならない
実行中クラスのクラスパスもしくはjarファイルの取得のClassPathLocatorを使っていたのだが、不具合に気がついた(既に修正済)。
状況
空白や漢字混じりのパスにjarファイルを置いておくと。URLが以下のようなものになってしまう。
jar:file:/C:/Users/admin/Desktop/foobar%20%e3%82%b3%e3%83%94%e3%83%bc/sample.jar!/com/cm55/sample/ClassPathLocator.class
file部分のURLは、
file:/C:/Users/admin/Desktop/foobar%20%e3%82%b3%e3%83%94%e3%83%bc/sample.jar
結局、jarファイルのパスは、
C:\Users\admin\Desktop\foobar%20%e3%82%b3%e3%83%94%e3%83%bc\sample.jar
のようなものになってしまう。本来は以下にならなければいけない。
C:\Users\admin\Desktop\foobar コピー\sample.jar
解決
あるURLがあったとき、正しくPathを得るには以下のようにすれば良いようだ(Java7以降)。
Path path = Paths.get(url.toURI());
Fileを取得するには、
File file = path.toFile();
ディスカッション
コメント一覧
まだ、コメントがありません