2011-09-30 5 views
5

私はjarに含まれるテキストファイルをロードしようとしているJavaアプリケーションを持っています。親ディレクトリ参照を持つgetResource

私はgetClass().getResource("https://stackoverflow.com/a/b/c/")を実行すると、そのパスのURLを作成することができ、印刷することができ、すべてがうまく見えます。

しかし、私がgetClass().getResource(/a/b/../")を試してみると、nullというURLが返ってきます。

パス内に..が似ていないようです。誰でも私が間違っているのを見ますか?私はそれが有用であれば、より多くのコードを投稿することができます。

+0

この質問は私が検索しようとしていた質問に答えます。 jarからロードするときにnullを返すgetResource( "../ icons/SomeIcon.png")がありますが、ファイルシステムからロードするときにリソースを適切に返します。どちらの場合も、Javaは..を解決していないことにうんざりしています。 – Trejkaz

答えて

5

FilenameUtilsクラスのnormalize() methods(そのうちの4つがあります)がお手伝いします。それはApache Commons IO libraryにあります。

final String name = "https://stackoverflow.com/a/b/../"; 
final String normalizedName = FilenameUtils.normalize(name, true); // "https://stackoverflow.com/a/" 
getClass().getResource(normalizedName); 
+1

これはうまくいきました。私はWindowsシステムでUNIXスタイルのスラッシュ(/)を維持するためにnormalize(name、true)メソッドを使用しました。ありがとうございました! –

+0

@Trejkaz:編集提案をありがとう!残念ながら他の人には拒否されてしまい、手動で編集する必要があります。あなたの失われた+2ポイントを補うために、私はあなたの投稿をチェックし、それらのいくつかをupvotedしました。 – palacsint

2

getResource()で指定するパスはファイルシステムパスではなく、Fileオブジェクト(およびそのilk)によってパスが解決されるのと同じ方法で標準的に解決することはできません。別のパスを基準にしてリソースを読み込もうとしていると思いますか?

+0

ああ、私はコード内の別の場所からパスの一部を取得しています。そのため、文字列を組み合わせると、それらの文字列に ".."が入ります。私はgetResource( "/")で得られるベースディレクトリの上を壊そうとしていません。私が読もうとしているリソースは、別のパスに関連していますが、そのパスから「..」を手動で削除した場合には、そのままの状態で読み込むことができます。多分それは私がやらなければならないことです。 –

関連する問題