2012-10-03 10 views
8

criteria.txtファイルから読み込み、同じファイルの末尾にトークンを付けて追加したいと思います。プログラムは例外をスローします:No file found!私の間違いがどこにあるのか分かりません。どんな提案も私を助けます。前もって感謝します!Javaの同じファイルから読み書きする

ここ

が私のコードです:

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

あなたは、whileループの後、すなわちファイルを読み終えた後、あなたの読者を閉じる必要があります。現在、最初の行を読み取った後で閉じると、2行目を読み取ろうとすると "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();ループ内にbr.close();を配置しています。ファイルを書き込むたびにコンピュータにその旨を伝え、すぐにファイルを閉じて、ファイルを閉じたままにして、コンピュータは次の繰り返し/実行中にループのプログラムは、同じフォルダに「criteria.txt」という名前の新しいファイルが作成されますよう

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(); 
    } 
} 

フォルダまたはディレクトリのファイルが存在し、この場合には重要ではありません。しかし、私はこれに編集初期プログラムを持っていますJavaプログラムとして。ただし、ファイルが最初に空白になるため、テキストエディタでファイルを開いて、データを追加/追加する必要があります。プログラムの後続の実行は、すでに挿入されたコンテンツを新しい行に連結文字列として追加するようになります。プログラムを実行するたびに新しい行が生成されます。お役に立てれば。

関連する問題