1. ホーム

[解決済み】getResourceAsStreamがnullを返す。

2022-04-05 07:13:14

質問

Javaプロジェクトのコンパイル済みJAR内のパッケージからテキストファイルを読み込んでいます。関連するディレクトリ構造は次のとおりです。

/src/initialization/Lifepaths.txt

私のコードでは、ファイルを読み込むために Class::getResourceAsStream を返すようにしました。 InputStream .

public class Lifepaths {
    public static void execute() {
        System.out.println(Lifepaths.class.getClass().
            getResourceAsStream("/initialization/Lifepaths.txt"));
    }

    private Lifepaths() {}

    //This is temporary; will eventually be called from outside
    public static void main(String[] args) {execute();}
}

プリントアウトは常に null 何を使ってもダメです。上記でうまくいかない理由がよくわからないので、私も試してみました。

  • "/src/initialization/Lifepaths.txt"
  • "initialization/Lifepaths.txt"
  • "Lifepaths.txt"

どちらも動作しません。 私は 読む 多数 質問 大抵の場合、ルートパスを使ってファイルを読み込むようにと書かれていますが、私はすでにそうしています。それか、カレントディレクトリからファイルをロードするか(単にロード filename というのも試したことがあります。ファイルは、適切な場所に適切な名前でJARにコンパイルされています。

どうすれば解決できますか?

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

Lifepaths.class.getClass().getResourceAsStream(...) システムのクラスローダーを使ってリソースをロードすると、JARが見えないので明らかに失敗します。

Lifepaths.class.getResourceAsStream(...) は、Lifepaths クラスをロードしたのと同じクラスローダーを使ってリソースをロードし、JAR 内のリソースにアクセスできるはずです。