私はこのようなプロジェクト構造を持っています:
src
|-main
|-Java
|-com.abc.xyz
|-Login.Java
これにリソースファイルを追加し、リソースを読み取る必要があります
InputStream is = getClass().getResourceAsStream("launchers.properties");
これはヌルを与えています。
Intellijでは、resources
フォルダのsrc/main
の下に新しいパッケージを追加できないため、プロジェクト構造は次のようになります。 launchers.properties
リソースファイルをプロジェクトに読み込むにはどうすればよいですか?
src
|-main
|-Java
|-com.abc.xyz
|-Login.Java
|-resources
|-com.abc.xyz
|-Login
|-launcher.properties
@mabaによって提案された解決策を試しましたが、まだ動作しません
launcher.properties
は、Login
というフォルダーの下にあるべきではありません。 src/main/resources/com/abc/xyz
フォルダーに直接配置する必要があります。
私が言ったのと同じくらい簡単ですが、リソースフォルダーがソースフォルダーとしてマークされていない場合、これが問題になる可能性があります。
これが最初のクラスとセットアップです。
次に、resourcesフォルダーを作成します。
この新しく作成されたフォルダーは、ソースフォルダーとして自動的にマークされる必要があり、青色でマークされている場合はマークされています。それ以外の場合は、手動でマークする必要があります。
これで、パッケージを追加できるようになります。
そして今、あなたはそれにファイルを追加することができます:
また、アプリケーションを再実行しても、null
値は返されません。
また、パッケージビューにはlaunchers.properties
ファイルも必ず表示されます。
@mabaが指摘したように、コードが機能するためには、プロパティファイルはクラスと同じパッケージにある必要があります。
したがって、2つのファイルが必要です。
IntelliJがリソースを表示しているかどうかは、質問の横にあります。行う必要があるのは、結果がターゲットのアーティファクトに含まれているかどうかを確認することです。
build all
IntelliJで、作成したWAR/JAR/EARをお気に入りのZipビューアーで開き、「com/abc/xyz」フォルダーを参照します。両方のファイルが表示されます。
いいえ.....構造が間違っています。..resources
の下に同じパッケージを作成しないでください。これはugくて適切ではありません:resources
はリソース用であり、含むべきではありませんソースパッケージ。
ClassLoader.getResources(asStream)(path)
メソッドを使用する場合、メソッドはクラスパスのルートから検索を開始するだけで、パス名は先頭文字として/
で開始できません。あなたがしなければならないことは、IntelliJでresources
をresources folder
としてマークすることです。 resources
の下のファイルはクラスパスの下にリストされ、あなたがしたようにそれらを簡単に使用できます。
(以前の回答では、このオプションは2013年にはまだ利用できません。あなたはmark as source folder
しか持っていません。これまでのEclipseと同様に、「ソースフォルダーの追加」がありますが、2018年にはIntellijで利用できます:フォルダーをソース、リソース、テストソース、テストリソースとしてマークすると、それらすべてがクラスパスのルートに追加されます。
メニューからVMオプションで構成を実行/編集します-Dspring.config.location = path-fileを追加する必要があります
私はIntelliJで試しましたが、うまくいきます!
私は同じ問題を抱えていて、リソースファイルに気づきました。たとえば:my.properties
は、ビルド発生後にtarget
ディレクトリ内の対応するモジュールフォルダーにコピーされません。それを解決するために、ビルドプロセス中にモジュールディレクトリからtarget
ディレクトリにリソースをコピーするようにMavenに指示する必要がありました。の中に .pom
追加したファイル<resource>
そのような要素:
<project ...>
...
<build>
...
<resource>
<directory>src/main/Java/com/abc/xyz</directory>
<targetPath>com/abc/xyz</targetPath>
</resource>
</build>
...
</project>
<directory>
要素は、.pom
file、つまりプロジェクトのルートディレクトリ、および<targetPath>
要素は、スラッシュで区切られたパッケージ名を示します。