2012-07-27 3 views
0

텍스트 파일을 찾고 문자 배열로 만드는 프로젝트가 있습니다. 그러나 어떤 이유로 든 파일을 찾지 못하고 있습니다. 실행Java 프로젝트에서 파일을 찾을 수 없습니다.

public void initialize(){ 
    try{ 
    File file = new File(getClass().getResource("/worlds/world1.txt").toString()); 
    BufferedReader reader = new BufferedReader(
      new InputStreamReader(
       new FileInputStream(file), 
       Charset.forName("UTF-8"))); 
    int c; 
    for(int i = 0; (c = reader.read()) != -1; i ++) { 
     for(int x = 0; x < 20; x++){ 
      worlds[1][x][i] = (char) c; 
      c = reader.read(); 
     } 
    } 
    }catch(IOException e){ 
     e.printStackTrace(); 
    } 

} 

, 그것은 올바른 파일을 가리키는 콘솔에서 보여 주지만, 아무것도 존재하지 않는 주장 :이 모든 코드가 파일을 읽기/개방을 포함한다. 확인해 봤는데 파일이 완전히 손상되지 않았고 존재합니다. 여기서 무엇이 잘못 될 수 있습니까?

+0

'toString()'대신'toURI()'를 사용해야합니다. 그러나 더 나은 대답을 보려면 @Raffaele 게시 – Xeon

답변

3

그런 리소스를 얻지 마십시오. 당신은 그렇지 않으면 당신은 패키지에서 계산 포함 된 리소스에 대한 일반적인 CLASSPATH 문제에

0

파일 경로를 실행하는 것입니다, 당신은 IDE의 내부를 개발하는 경우 응용 프로그램을 패키지화 할 때 조심, 또

BufferedReader reader = new BufferedReader(new InputStreamReader(
    getClass().getResourceAsStream("/worlds/world1.txt") 
)); 

을 사용할 수 있습니다 루트 폴더.

// we do not need this line anymore 
// File file = new File(getClass().getResource("/worlds/world1.txt").toString()); 

// use this approach 
BufferedReader reader = new BufferedReader(
     new InputStreamReader(
      getClass().getResourceAsStream("/worlds/world1.txt"), 
      Charset.forName("UTF-8"))); 
0
: 루트 패키지 폴더 world1.txt 파일이 src/worlds/ 폴더의 전체 경로에 위치하는지, 확인 src 폴더가되는 것을 가정하면 src/worlds/world1.txt

두 번째 지점입니다, 포함 된 파일 판독기 개체를 얻으려면 다음 코드를 사용

파일의 저장 위치를 ​​명시하지 않았습니다.

getClass().getResource은 클래스 경로에서 리소스/파일을 찾는 데 사용됩니다. 예를 들어 리소스가 병에 패키징 될 수 있습니다. 이 경우에는 File으로 열 수 없습니다. Raffaele의 반응을보십시오. 당신은 파일 시스템의 자원/파일을 찾으려면

, 다음 getResource()하지 않고 직접 파일 객체를 생성 :

새로운 파일 ("/ 세계/world1.txt")

0

Netbeans을 사용하고 있는데 비슷한 결과가 나타납니다. C 드라이브에서 파일 경로를 정의하고 코드를 실행했을 때 액세스가 거부되었습니다.

다음 코드는 제대로 실행되었지만 파일 위치를 원본 (src) 파일로 다시 추적합니다.

//EXAMPLE FILE PATH 
String filePath = "src\\solitaire\\key.data"; 

try { 
    BufferedReader lineReader = new BufferedReader(new FileReader(filePath)); 

    String lineText = null; 

    while ((lineText = lineReader.readLine()) != null) { 
     hand.add(lineText); 

     System.out.println(lineText); // Test print of the lines 
    } 

    lineReader.close(); // Closes the bufferReader 

    System.out.print(hand); // Test print of the Array list 
} catch(IOException ex) { 
    System.out.println(ex); 
}  
+0

당신이'BufferedReader'를 사용하고 있기 때문에 당신이'try'-with-resources 블록을 사용할지라도'try (BufferedReader lineReader = new BufferedReader (new FileReader (filePath))) {{ '. 그건 그렇고, [so]에 오신 것을 환영합니다! [여행]을 잊지 마세요 :) – Unihedron

관련 문제