여러 모듈로 구성된 Java 프로젝트가 있습니다.
myWebApp
- conf //not a java module, just text files
- ModuleA
-- src
-- target
-- moduleA.iml
-- pom.xml
- ModuleB
...
- pom.xml
- myWebApp.iml
- myWebApp.env
다음 myWebApp.env
과 같이 클래스 (분명히 모듈의 src 폴더 아래에 있음)에서 파일 (Java 속성 파일) 에 액세스 하고 싶습니다.
InputStream is = new FileInputStream(<RelativePathToEnvFile>);
문제는 상대 경로가 모듈의 소스 루트 아래의 하위 디렉토리 또는 여기에 언급 된 getResource () 트릭을 사용하는 클래스 경로 내부의 모든 위치에서만 작동하는 것처럼 보인다는 것입니다 .
다른 모든 언어에서는 다음과 같이 할 수 있습니다.
InputStream is = new FileInputStream("../../../../../myWebApp.env");
이것은 자바에서 가능하지 않습니까?
Java 7부터 NIO Files API로이 작업을 수행 할 수 있습니다 (이전 파일 API도 작동하지만 상대 경로 확인은 NIO에서 더 잘 수행됨).
File file = Paths.get("../../pom.xml").toFile();
파일이 올바른지 확인하기 위해 호출 toRealPath()
하여 상대 경로 세그먼트를 확인할 수 있습니다.
File file = Paths.get("../../pom.xml").toRealPath().toFile();
시작할 작업 디렉토리가있는 경우 다음에서 상대 경로를 확인할 수 있습니다.
File file = Paths.get(".") //the current working dir
.resolve("../pom.xml") //navigate to a relative path
.toFile(); //convert to old File api
IDE로 작업 할 때 작업 디렉토리가 올바른지 확인해야합니다. 작업 디렉토리가 실행 된 클래스가 속한 것과 동일한 모듈 디렉토리 일 필요는 없습니다. 작업 디렉토리는 프로젝트 / 부모 모듈의 디렉토리 일 수 있습니다.
또한 코드는 특정 설정에서만 작동 할 수 있습니다. 적어도 모듈 중 하나의 리소스 폴더에 env 파일을 넣거나 (또는 별도의 구성 모듈이있는) 클래스 경로에서 파일을 확인해야합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다