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"