このgetClass().getResource("filename.txt")
方法の使用に問題がありました。Java docsの説明を読んだときに、リソースがリソースにアクセスしようとしているクラスと同じパッケージにない場合は、で始まる相対パスを指定する必要があります'/'
。推奨される戦略は、リソースファイルをルートディレクトリの「resources」フォルダに配置することです。したがって、たとえば、構造がある場合:
src/main/com/mycompany/myapp
次に、mavenが推奨するリソースフォルダーを次の場所に追加できます。
src/main/resources
さらに、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
フォルダ。ただし、resourcesフォルダーはありません。resourcesフォルダー内のフォルダーのみです。だからあなたは持っています:
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"