2012-10-03 11 views
8

Voglio leggere dal file criteria.txt, per tokenizzare e aggiungere alla fine dello stesso file i token. Il programma genera un'eccezione: No file found! Non so dove sia il mio errore. Qualsiasi suggerimento mi aiuterebbe. Grazie in anticipo!Lettura e scrittura da e verso lo stesso file in Java

Ecco il mio codice:

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

Se si utilizza Eclipse, il file deve trovarsi nella directory principale del progetto. –

+3

È necessario stampare la traccia dello stack per trovare la riga di codice offendente. – Vulcan

+0

controlla la directory dei file – Abubakkar

risposta

8

È necessario chiudere il lettore dopo aver terminato la lettura del file vale a dire dopo il ciclo while. Attualmente, lo stai chiudendo dopo aver letto la prima riga, che causa un "IOException: Stream closed" quando tenta di leggere la seconda riga.

Passa a:

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

Grazie! Funziona ora. – Lavinia

0

a mio parere non si può farlo. Non è possibile aprire lo stesso file per leggere e scrivere allo stesso tempo. È necessario aprire e salvare le informazioni sul file in una struttura dati e quindi chiuderlo. Quindi devi lavorare con la struttura dati in memoria e aprire il file per scrivere i risultati. E quando finisci di scrivere dovresti chiuderlo.

1

La tua più grande rovina sta mettendo il br.close(); all'interno del ciclo while(): si sta dicendo il computer ogni volta che si scrive nel file per chiuderla subito, da qui il file è rimasto chiuso e il computer non potrà mai trovarla durante la prossima iterazione/esecuzione del ciclo. Tuttavia, ho modificare il programma iniziale a questo:

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

La cartella o directory il file esiste non importa in questo caso il programma creerà un nuovo file chiamato "criteria.txt" nella stessa cartella come il programma java; tuttavia, dovrai aprire il file con un editor di testo per aggiungere/aggiungere alcuni dati poiché inizialmente il file sarà vuoto. L'esecuzione successiva del programma aggiungerà ora il/i contenuto/i già inserito/i come stringa di concatenazione su una nuova riga. Una nuova riga verrà prodotta ogni volta che viene eseguito il programma. Spero che questo ti aiuti.

Problemi correlati