いくつかのJavaファイルとクラスパスリソースR.txtを含むプロジェクトAがあります。プロジェクト内では、ClassLoader.getSystemResource( "R.txt");を使用してR.txtを取得します。
次に、プロジェクトAのjarファイルを含むプロジェクトBがあります。 getSystemResource( "R.txt")はテキストファイルを検出しません(はい、それはまだjarファイルのルートにあります)。他のサイトで提案されているように「/R.txt」を試しても機能しませんでした。何か案は?
getResource
の代わりにgetSystemResource
を使用して、システムの代わりに特定のクラスローダーに固有のリソースを使用します。たとえば、次のいずれかを試してください。
URL resource = getClass().getClassLoader().getResource("R.txt");
URL resource = Foo.class.getClassLoader().getResource("R.txt");
URL resource = getClass().getResource("/R.txt");
URL resource = Foo.class.getResource("/R.txt");
Class.getResource
の代わりに ClassLoader.getResource
を呼び出すときは、先頭のスラッシュに注意してください。 Class.getResource
は、先頭にスラッシュがない限り、クラスを含むパッケージに関連していますが、ClassLoader.getResource
は常に絶対値です。
どうやらあなたのJARはシステムクラスローダーによってロードされていないので、getSystemResource()
は機能しません。これは機能するはずです:
_ClassFromProjectA.class.getClassLoader().getResource("R.txt")
_
IMOの方が便利なのは、リソースを使用するクラスと同じパッケージ内にリソースを配置することです。これにより、より短いリソースを使用できます。
_ClassFromProjectA.class.getResource("R.txt")
_
(または、そのクラス内ではgetClass().getResource("R.txt")
)
ClassLoader.getResource() は機能しますか?現時点では、システムクラスローダーを使用するように指定しているだけです。