getClass().getResource("filename.txt")
メソッドの使用に問題がありました。Java ドキュメントの説明を読んだときに、リソースにアクセスしようとしているクラスと同じパッケージにリソースが含まれていない場合は、 で始まる相対パスを指定する必要があります'/'
。推奨される戦略は、ルート ディレクトリの "resources" フォルダーにリソース ファイルを配置することです。たとえば、次のような構造の場合:
src/main/com/mycompany/myapp
次に、maven で推奨されているように、次のリソース フォルダーを追加できます。
src/main/resources
さらに、リソースフォルダーにサブフォルダーを追加できます
src/main/resources/textfiles
そして、あなたのファイルが呼び出されていると言いmyfile.txt
ます
src/main/resources/textfiles/myfile.txt
ここで、ばかげたパスの問題が発生します。 にクラスがあり、リソース フォルダーからファイルcom.mycompany.myapp package
にアクセスしたいとします。myfile.txt
次のものを与える必要があると言う人もいます:
"/main/resources/textfiles/myfile.txt" path
また
"/resources/textfiles/myfile.txt"
これらは両方とも間違っています。を実行した後mvn clean compile
、ファイルとフォルダーは次の場所にコピーされます。
myapp/target/classes
フォルダ。ただし、リソース フォルダーは存在せず、リソース フォルダー内のフォルダーだけです。だからあなたは持っています:
myapp/target/classes/textfiles/myfile.txt
myapp/target/classes/com/mycompany/myapp/*
getClass().getResource("")
したがって、メソッドに与える正しいパスは次のとおりです。
"/textfiles/myfile.txt"
ここにあります:
getClass().getResource("/textfiles/myfile.txt")
これは null を返しませんが、クラスを返します。これが誰かに役立つことを願っています。"resources"
フォルダーもコピーされず、フォルダー内のサブフォルダーとファイルのみが直接コピーされるのは奇妙です"resources"
。"resources"
フォルダーが以下にもあることは私には論理的に思えます"myapp/target/classes"