곰 염두에두고 (예 : 앱 또는 서버). 이 경우 개발 소스 코드 구조를 사용할 수 없습니다.
자바에서 텍스트 파일이나 다른 리소스를 읽는 방법에는 두 가지가 있습니다. 실제 파일 경로를 찾을 수 있습니다.이 경우 개발 소스 트리가 부족한 경우 처리해야합니다. 그렇지 않으면 텍스트 파일을 프로젝트에 묶는 방법을 찾아야합니다.
대부분의 Java 프로젝트는 JAR 파일 또는 WAR 파일 (웹 응용 프로그램 용) 또는 Android APK와 같은 일종의 아카이브로 컴파일됩니다. 대부분의 경우 자신의 텍스트 파일을 프로젝트 아카이브에 추가 할 수 있습니다. 예를 들어 Maven 프로젝트에서 텍스트 파일을 src/main/resources
폴더에 넣으면 컴파일 된 JAR에 포함되어야합니다.
그러나이 경우 텍스트 파일은 더 이상 별도의 파일이 아닙니다. 디스크가 아니라 오히려 아카이브 내부의 데이터 묶음입니다. 실제 File
개체를 얻기 위해 압축 파일을 압축 해제 할 수 있지만 실제로 필요한 모든 것이 바이트를 읽는 것이면 낭비입니다.
따라서 이와 같은 텍스트 파일을 읽는 가장 일반적인 방법은 기존의 ClassLoader
메커니즘을 사용하는 것입니다.이 방법은 디스크 (또는 아카이브 또는 네트워크를 통해)에서 .class
파일을 읽는 것입니다. ClassLoader
은 컴파일 된 코드와 나란히있는 바이트를로드하는 방법을 이미 알고 있으므로 사용할 수 있습니다. 귀하의 경우에는
, 당신은 같은 것을 할 수 있어야한다 :이 경우
Scanner scanner = new Scanner(
getClass().getResourceAsStream("/path/to/file.txt"));
는 /path/to/file.txt
경로는 클래스에서로드 된 경로에 상대적입니다. 예 : 클래스의 이름이 my.package.Foo
인 경우 실제 클래스 바이트는 my/package/Foo.class
이라는 폴더 (파일 시스템 폴더 또는 JAR 파일 등)에 있습니다.이 경우 path/to/file.txt
과 my/package/Foo.class
은 같은 루트를 기준으로합니다.
자세한 내용은 the documentation on resources을 참조하십시오.