2 개의 패키지가있는 프로젝트가 있습니다.
tkorg.idrs.core.searchengines
tkorg.idrs.core.searchengines
패키지 (2)에는 텍스트 파일 ListStopWords.txt
이 있고 패키지 (1)에는 클래스가 FileLoadder
있습니다. 다음은 코드입니다 FileLoader
.
File file = new File("properties\\files\\ListStopWords.txt");
그러나 다음과 같은 오류가 있습니다.
The system cannot find the path specified
그것을 고칠 해결책을 줄 수 있습니까? 감사.
답변
이미 클래스 경로에있는 경우 디스크 파일 시스템 대신 클래스 경로에서 가져옵니다. .NET에서 상대 경로를 조작하지 마십시오 java.io.File
. Java 코드 내부에서 완전히 제어 할 수없는 현재 작업 디렉토리에 의존합니다.
클래스 ListStopWords.txt
와 동일한 패키지에 있다고 가정하고 FileLoader
다음을 수행하십시오.
URL url = getClass().getResource("ListStopWords.txt");
File file = new File(url.getPath());
또는 궁극적으로 추구하는 것이 실제로 그 InputStream
중 하나 인 경우 :
InputStream input = getClass().getResourceAsStream("ListStopWords.txt");
는 디스크 파일 시스템 경로를 나타내지 않을 수도 있지만 가상 파일 시스템 경로를 나타낼 수도 new File()
있기 때문에 를 만드는 것보다 확실히 선호 url
됩니다 (JAR가 디스크 파일 시스템의 임시 폴더가 아닌 메모리로 확장 될 때 발생할 수 있음). 또는 File
생성자가 정의 할 수없는 네트워크 경로도 있습니다.
파일이-패키지 이름 힌트로서- 실제로 “잘못된”확장자를 가진 완전한 속성 파일 ( key=value
줄 포함 ) 인 경우 InputStream
즉시 load()
메소드에 를 공급할 수 있습니다.
Properties properties = new Properties();
properties.load(getClass().getResourceAsStream("ListStopWords.txt"));
참고 : static
컨텍스트 내부 에서 액세스하려는 경우 위의 예 대신 FileLoader.class
(또는 무엇이든 YourClass.class
) 사용하십시오 getClass()
.
답변
파일의 상대 경로를 지정하려는 경우 다음 행을 사용할 수 있습니다.
File file = new File("./properties/files/ListStopWords.txt");
답변
상대 경로는. 운영자.
- . 현재 실행중인 컨텍스트와 동일한 폴더를 의미합니다.
- ..은 현재 실행중인 컨텍스트의 상위 폴더를 의미합니다.
그래서 문제는 자바가 현재 찾고있는 경로를 어떻게 아는가?
작은 실험을하다
File directory = new File("./");
System.out.println(directory.getAbsolutePath());
출력을 관찰하면 Java가 찾고있는 현재 디렉토리를 알 수 있습니다. 거기에서 ./ 연산자를 사용하여 파일을 찾으십시오.
예를 들어 출력이
G : \ JAVA8Ws \ MyProject \ content.
파일은 MyProject 폴더에 있습니다.
File resourceFile = new File("../myFile.txt");
도움이 되었기를 바랍니다
답변
InputStream in = FileLoader.class.getResourceAsStream("<relative path from this class to the file to be read>");
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
}
답변
시험 .\properties\files\ListStopWords.txt
답변
나는 댓글을 달 수 있었지만 그에 대한 담당자가 적습니다. Samrat의 대답이 나를 위해 일했습니다. 다음 코드를 통해 현재 디렉토리 경로를 보는 것이 좋습니다.
File directory = new File("./");
System.out.println(directory.getAbsolutePath());
프로젝트에서 직면 한 문제를 바로 잡는 데 사용했습니다. ./를 사용하여 현재 디렉토리의 상위 디렉토리로 돌아 가야합니다.
./test/conf/appProperties/keystore
답변
BalusC에서 제공하는 답변은이 경우에 작동하지만 파일 경로에 공백이 포함 된 경우 URL이 유효한 파일 이름이 아닌 % 20으로 변환되기 때문에 중단됩니다. 문자열이 아닌 URI를 사용하여 File 객체를 생성하면 공백이 올바르게 처리됩니다.
URL url = getClass().getResource("ListStopWords.txt");
File file = new File(url.toURI());