.JARに含まれるリソースを読み取ろうとしていますが、次のnullPointerを取得します。
bReader = new BufferedReader(new InputStreamReader(
this.getClass().getResourceAsStream("resources/" + fileName)));
ただし、ファイルの使用は正常に機能します。
bReader = new BufferedReader(new FileReader(new File("resources/" + fileName)));
IDEまたはMavenまたはビルドプロセスにルートのjar内の「リソース」の内容が含まれると想定して、「/」で見つけてみてください。
bReader = new BufferedReader(new InputStreamReader(
this.getClass().getResourceAsStream("/" + fileName)));
更新:
「resources」フォルダーがソースフォルダーとして構成されていることを確認してください。
「resources」フォルダをリソースフォルダとして設定します。このコードを試してください:
bReader = new BufferedReader(new
InputStreamReader(getClass().getClassLoader().getResourceAsStream(fileName)))
これは、リーダークラスと読み取られるファイルが異なるパッケージに含まれているためです。 this.getClass().getRasourceAsStream("resource/file_name")
が呼び出されると、現在のリーダークラスが存在するパッケージディレクトリ内のリソースディレクトリが検索され、見つかった場合は「file_name」ファイルが検索されます。したがって、ファイルが存在しない場合はnullを返します。
この場合、それに応じて現在のファイルリーダークラスディレクトリから戻る必要があり、次にファイルへのパスを指定する必要があります。ディレクトリから戻るには、_../
_を使用する必要があります
たとえば、Readerクラスパッケージの場合:_package com.abc.util;
_ファイルが次の場所に存在する:_com.abc.template;
_次に、次のようにgetResourceAsStream()
メソッドを呼び出す必要があります。
_bReader = new BufferedReader(new InputStreamReader(
this.getClass().getResourceAsStream("../template/" + fileName)));
_
getClassLoader().getResourceAsStream(filename)
とは異なり、getClass().getResourceAsStream(filename)
を使用しているバージョンは、クラスパスルートではなく、クラスの場所に相対的なパスを使用します。絶対パスgetClass().getResourceAsStream("/" + filename)
を使用するか、ClassLoader
バージョンを使用する必要があります。
また、「resources」がクラスパスにあることを確認してください(Mavenを使用している場合は、pom.xmlに対して「src/main/resources」である必要があります)。その場合、ファイル名に「リソース」を実際に含める必要はありません。これは、クラスパスルートであるためです。