2014-03-06 3 views
1

문자열을 PrintWriter를 사용하여 텍스트 파일에 성공적으로 쓰고 있으며, 기본적으로 출력 텍스트 파일은 내가 작업중인 Eclipse 프로젝트의 디렉토리에 기록됩니다.Printwriter 대상 문제

하지만 내 이클립스 프로젝트는 특정 폴더 내가 텍스트 파일에 기록 할 자료라고했습니다

내 코드는 다음과 같습니다

:

protected void saveCommandsToFile() throws FileNotFoundException, IOException { 
    PrintWriter out = new PrintWriter("commands.txt"); 
    int listsize = list.getModel().getSize(); 
    for (int i=0; i<listsize; i++){ 
     Object item = list.getModel().getElementAt(i); 
     String command = (String)item; 
     System.out.println(command); //use console output for comparison 
     out.println(command); 
    } 
    out.close(); 
} 

난에 라인을 변경하는 경우

PrintWriter out = new PrintWriter("/Resources/commands.txt"); 

FileNotFoundException이 발생합니다. 이 문제를 어떻게 해결할 수 있습니까? 고맙습니다!

답변

1

PrintWriter 이렇게 생성 된 경로는 상대 경로이거나 절대 경로 일 것입니다.

상대 경로는 작업 디렉토리와 관련이 있습니다.

절대 경로는 루트 디렉토리 (또는 디렉토리)의 전체 경로를 포함해야하므로 Windows 상자의 경우 유닉스 형 시스템 /home/nobody/foo/bar.txt에서 c:/foo/bar.txt과 같을 것입니다.

절대 경로 및 상대 경로에 대한 정확한 규칙은 here입니다.

상대 경로의 사용에 대한 메모. 작업 디렉토리가 무엇인지 모를 방법이 없기 때문에 의존 할 때주의하십시오. Eclipse에서 응용 프로그램을 실행할 때 프로젝트 디렉토리가 기본값이지만 패키지를 패키지로 명령 줄, 그것은 어딘가에있을 것입니다.

Eclipse에서 실행하는 경우에도 프로젝트 폴더에 글을 쓰는 것은 최선의 방법이 아닙니다. 실수로 소스 코드를 덮어 쓰는 것이 가능할뿐만 아니라 코드가 이식성이 떨어지게됩니다. 나중에 모든 파일을 jar 파일로 패키지화하기로 결정하면 해당 디렉토리를 찾을 수 없습니다. 더 이상 (모두 포장되기 때문에). 코드 아래

0

지정하는 경로는 절대 경로입니다. 자바 프로그램을 실행하는 곳의 상대 경로가되도록하려면 "./Resources/commands.txt"을 사용해보십시오.

다른 방법으로 프로젝트 내의 폴더에 대한 전체 경로를 사용할 수 있습니다.

1

시도 :

Project 
| 
|___src 
| 
|___resources 
    | 
    |___commands.txt 
: 여기

protected static void saveCommandsToFile() throws FileNotFoundException, IOException { 
    File file = new File("resources/commands.txt"); 
    System.out.println("Absolute path:" + file.getAbsolutePath()); 
    if (!file.exists()) { 
     if (file.createNewFile()) { 
      PrintWriter out = new PrintWriter(file); 
      out.println("hi"); 
      out.close(); 
     } 
    } 
} 

프로젝트 폴더 구조