1. ホーム
  2. java

[解決済み] 私のURIはなぜ階層化されていないのですか?重複

2022-02-04 07:35:09

質問

リソースフォルダにファイルを置いています。例えば、リソースフォルダからファイルを取得する必要がある場合、私はこのようにします。

File myFile= new File(MyClass.class.getResource(/myFile.jpg).toURI());             
System.out.println(MyClass.class.getResource(/myFile.jpg).getPath());

私は テスト と、すべて 動作 !

パスは

/D:/java/projects/.../classes/X/Y/Z/myFile.jpg

しかし jarファイルを作成する場合、, メイヴン :

mvn package

...そして、私のアプリを起動します。

java -jar MyJar.jar

以下のようなエラーが発生しました。

Exception in thread "Thread-4" java.lang.RuntimeException: ხელმოწერის განხორციელება შეუძლებელია
Caused by: java.lang.IllegalArgumentException: URI is not hierarchical
        at java.io.File.<init>(File.java:363)

... で、ファイルのパスが :

file:/D:/java/projects/.../target/MyJar.jar!/X/Y/Z/myFile.jpg

この例外は、リソースフォルダからファイルを取得しようとしたときに発生します。この行で。なぜですか?なぜJARファイルにそのような問題があるのでしょうか?あなたはどう思いますか?

リソースフォルダのパスを取得する他の方法はありますか?

どのように解決するのですか?

を使用する必要があります。

getResourceAsStream(...);

リソースが jar/war またはその他の単一ファイルパッケージとしてバンドルされている場合。

つまり、jarはたくさんのファイルをまとめた1つのファイル(zipファイルのようなもの)なのです。Osの視点からは、これは1つのファイルであり、もしあなたが part of the file (画像ファイル)をストリームとして使用する必要があります。

ドキュメンテーション