2012-10-03 4 views
8

criteria.txt 파일에서 토큰을 토큰 화하고 끝에 덧붙이고 싶습니다. 프로그램에서 예외를 throw합니다. No file found! 내 실수가 어디인지 알 수 없습니다. 어떤 제안이라도 도움이 될 것입니다. 미리 감사드립니다.Java에서 동일한 파일에서 읽고 쓰는 것

여기 내 코드입니다 :

당신은 while 루프 후 파일 즉, 읽기 완료 한 후 판독기를 닫을 필요
import java.io.*; 
import java.util.StringTokenizer; 

public class Test 
{ 
    private FileReader fr; 
    private BufferedReader br; 
    private FileWriter fw; 
    private BufferedWriter bw; 
    private StringTokenizer strtok; 
    private String s; 

    //constructor 
    public Test() 
    { 
     try 
     { 
      fw=new FileWriter("criteria.txt", true); 
      bw=new BufferedWriter(fw); 

      try 
      { 
       fr=new FileReader("criteria.txt"); 
       br=new BufferedReader(fr); 

       while((s=br.readLine())!=null) 
       { 
        strtok=new StringTokenizer(s," "); 
        while(strtok.hasMoreTokens()) 
        { 
         bw.write("\n"+strtok.nextToken()); 
        } 
        br.close(); 
       } 
      } 
      catch(FileNotFoundException e) 
      { 
       System.out.println("File was not found!"); 
      } 
      catch(IOException e)  
      { 
       System.out.println("No file found!"); 
      } 

      bw.close(); 
     } 
     catch(FileNotFoundException e) 
     { 
      System.out.println("Error1!"); 
     } 
     catch(IOException e)  
     { 
      System.out.println("Error2!"); 
     } 
    } 

    public static void main(String[] args) 
    { 
     Test t=new Test(); 
    } 
} 
+1

Eclipse를 사용하는 경우 파일은 프로젝트의 루트 디렉토리에 있어야합니다. –

+3

잘못된 코드 줄을 찾으려면 스택 추적을 인쇄해야합니다. – Vulcan

+0

파일 디렉토리를 확인하십시오. – Abubakkar

답변

8

. 현재 두 번째 줄을 읽으려고 할 때 "IOException: Stream closed"이 나오는 첫 번째 줄을 읽은 후에 닫는 중입니다. 에

변경 : 제 생각에는

while((s=br.readLine())!=null) 
{ 
    strtok=new StringTokenizer(s," "); 
    while(strtok.hasMoreTokens()) 
    { 
     bw.write("\n"+strtok.nextToken()); 
    } 
    //br.close(); <----- move this to outside the while loop 
} 
br.close(); 
+0

감사합니다! 지금 일하고있다. – Lavinia

0

당신은 그렇게 할 수 없습니다. 같은 파일을 열어서 동시에 읽고 쓸 수는 없습니다. 파일 정보를 열고 저장 한 다음 데이터 구조를 닫아야합니다. 그런 다음 메모리의 데이터 구조로 작업하고 파일을 열어 결과를 작성해야합니다. 그리고 쓰기를 마치면 그것을 닫아야합니다.

1

가장 큰 돌격은 br.close();을 루프 안에 넣습니다. 컴퓨터가 파일을 쓸 때마다 즉시 컴퓨터를 종료하므로 파일이 닫히고 컴퓨터는 다음 반복/실행 중에 찾지 않습니다. 루프의 그러나, 나는이에 초기 프로그램을 편집 할 있습니다

import java.io.*; 
import java.util.StringTokenizer; 

public class Test 
{ 
    private FileReader fr; 
    private BufferedReader br; 
    private FileWriter fw; 
    private BufferedWriter bw; 
    private StringTokenizer strtok; 
    private String s; 

    //constructor 
    public Test() 
    { 
     try 
     { 
      fw=new FileWriter("criteria.txt", true); 
      bw=new BufferedWriter(fw); 

      try 
      { 
       fr=new FileReader("criteria.txt"); 
       br=new BufferedReader(fr); 

       **while((s=br.readLine())!=null) 
       { 
        strtok=new StringTokenizer(s," "); 
        while(strtok.hasMoreTokens()) 
        { 
         bw.write("\n"+strtok.nextToken()); 
        } 

       } 
        br.close(); 
      }** 
      catch(FileNotFoundException e) 
      { 
       System.out.println("File was not found!"); 
      } 
      catch(IOException e)  
      { 
       System.out.println("No file found!"); 
      } 
      bw.close(); 
     } 
     catch(FileNotFoundException e) 
     { 
      System.out.println("Error1!"); 
     } 
     catch(IOException e)  
     { 
      System.out.println("Error2!"); 
     } 
    } 

    public static void main(String[] args) 
    { 
     Test t=new Test(); 
    } 
} 

파일이 프로그램은 같은 폴더에 "criteria.txt"라는 새 파일이 만들어집니다이 경우에 문제가되지 않는 존재하는 폴더 나 디렉토리 자바 프로그램으로; 그러나 처음에는 파일이 비어있을 수 있으므로 일부 데이터를 추가/추가하려면 텍스트 편집기로 파일을 열어야합니다. 프로그램을 계속 실행하면 이미 삽입 된 내용이 연결 문자열로 새 줄에 추가됩니다. 프로그램을 실행할 때마다 새로운 라인이 생성됩니다. 희망이 도움이됩니다.

관련 문제