2012-01-17 2 views
3

나는 항아리에 보관하는 정적 클래스라는 메소드에 다음 코드가있다 :FileNotFoundException. 작품과 동시에 작동하지 않습니다?

1 System.out.println(Methods.class.getResource("tagdict.txt")); 
2 URL test=Methods.class.getResource("tagdict.txt"); 
3 System.out.println(test.getPath()); 
4 TagDictionary dict = new POSDictionary(test.getPath()); 

첫 번째 System.out을 (1) 말한다 :

rsrc:de/fhg/scai/bio/harsha/classificationworkflow/tagdict.txt 

두 번째 System.out에 (2) 말한다 :

de/fhg/scai/bio/harsha/classificationworkflow/tagdict.txt 

라인 4는

java.io.FileNotFoundException: de/fhg/scai/bio/harsha/classificationworkflow/tagdict.txt (No such file or directory) 
,536 발생

'tagdict.txt'파일은 'Method.class'와 동일한 패키지 (de/fhg/scai/bio/harsha/classificationworkflow)에 있습니다.

파일이 항아리 안에 이미있는 경우에도 4 행에서 FileNotFoundException이 throw되는 이유를 알 수 없습니다.

+0

'POSDictionary'의 생성자에 대한 코드를 작성하는 데 도움이됩니다. 거기에 예외가 발생하기 때문에 도움이됩니다. – Viruzzo

답변

4

라인 3은 getResource에 의해 반환 된 URL의 경로 구성 요소를 인쇄합니다. 해당 경로가 디스크의 실제 파일을 나타내는 지 실제로 확인하지는 않습니다.

POSDictionary 생성자가 전달 된 경로 문자열을 사용하여 File을 만들려고하는 것처럼 보입니다.이 경로는 실제로 디스크상의 파일을 나타내지 않으므로 예외가 발생합니다.

필자의 파일이 jar 파일에 이미 있음에도 불구하고 4 행에서 FileNotFoundException이 throw되는 이유를 알 수 없습니다.

리소스가 JAR에 있으면 파일이 아니기 때문입니다. 이러한 리소스는 URL 개체에서 직접 입력 스트림을 열거 나 getResource() 대신 getResourceAsStream()을 사용하여 액세스 할 수 있습니다. 실제 디스크 파일이 아니기 때문에 java.io.File을 사용하여 액세스 할 수 없습니다.