次を使用してクラスパス上のリソースにアクセスしようとしていますgetResourceAsStream()
:
InputStream is = getClass().getResourceAsStream(path);
path が次のようなものであれば/net/original/xsdtestxml.xml
、問題はありません。../
ただし、特定のファイルにアクセスするために「親に移動」記号を使用する必要がある状況があります。特定のパラメーターに基づいて手動でパスを作成しています。
最終結果は次のようになります。
/net/original/../original/xsdtestxml.xml
これはEclipseでうまく機能します。Eclipse の外部で実行すると (.class が含まれるプログラムのターゲット フォルダーのコマンド ラインから) 正常に動作します。ただし、それらをjarファイルにパックするとすぐにスローされNullPointerException
ます。
getResourceAsStream()
jar にエクスポートした後、そのような形式をサポートする可能性はありますか? ../
そうでない場合、符号なしでファイル パスを取得できる Java/ユーティリティ クラスはありますか? たとえば、フォーマットに変換する/net/original/../original/xsdtestxml.xml
には/net/original/xsdtestxml.xml
?
考えられる解決策の 1 つ:
パッケージには、必要なことを行うURI
クラスがあります。コンストラクターでオブジェクトを作成するか、静的メソッドを使用java.net
するだけです。次に、メソッドを呼び出し、またはメソッドを使用して文字列パスを取得できます。URI
create(String)
normalize()
toString()
getPath()
これが私のために働いたコードの例です:
String finalPath = URI.create(inputPath).normalize().getPath();
inputPath
../
リテラルを含むことができるパスです。これは、クラスパス上のjarからファイルにアクセスするために必要なものに完全に変換/net/original/../original/xsdtestxml.xml
されます。/net/original/xsdtestxml.xml