2011-10-29 13 views
5

In Java, c'è un modo di leggere un file (file di testo) in modo che possa leggere solo un carattere alla volta, piuttosto che String by String. Questo è per lo scopo di un analizzatore lessicale estremamente semplice, quindi puoi capire perché vorrei un tale metodo. Grazie.Lettura da file di testo carattere per carattere

+0

In realtà, io non capisco; il modo in cui gestisci l'input non è lo stesso del modo in cui lo leggi. IMO dovresti usare un lettore bufferizzato e elaborare il carattere di input per carattere, non leggerlo esplicitamente in quel modo. –

risposta

3

Potete leggere l'intero file (se non è molto grande) nella memoria come stringa, e itera sul personaggio stringa di caratteri

+2

Anche non una risposta. – FailedDev

+1

È una risposta, pensi che dovrebbe contenere un codice per essere una risposta! –

5

Ecco un codice di esempio per la lettura/scrittura di un carattere alla volta

public class CopyCharacters { 
    public static void main(String[] args) throws IOException { 

     FileReader inputStream = null; 
     FileWriter outputStream = null; 

     try { 
      inputStream = new FileReader("xanadu.txt"); 
      outputStream = new FileWriter("characteroutput.txt"); 

      int c; 
      while ((c = inputStream.read()) != -1) { 
       outputStream.write(c); 
      } 
     } finally { 
      if (inputStream != null) { 
       inputStream.close(); 
      } 
      if (outputStream != null) { 
       outputStream.close(); 
      } 
     } 
    } 
} 

Nota, questa risposta è stata aggiornata per copiare il codice di esempio dal collegamento Ref, ma vedo che questa è essenzialmente la stessa risposta riportata di seguito.

ref: http://download.oracle.com/javase/tutorial/essential/io/charstreams.html

+1

Non una risposta piuttosto un commento. – FailedDev

+0

Hai guardato il link? Mostra come leggere un file di testo carattere per carattere. –

+0

Mettilo su un commento? – FailedDev

1

È possibile utilizzare il metodo di lettura della classe InputStreamReader che legge un carattere dal flusso e restituisce -1 quando raggiunge la fine del flusso

public static void processFile(File file) throws IOException { 
     try (InputStream in = new FileInputStream(file); 
      Reader reader = new InputStreamReader(in)) { 

      int c; 
      while ((c = reader.read()) != -1) { 
       processChar((char) c); // this method will do whatever you want 
      } 
     } 
    } 
0

ci sono diverse soluzioni possibili. In generale si può usare qualsiasi Reader da java.io pacchetto per i caratteri di lettura, ad es .:

// Read from file 
BufferedReader reader = new BufferedReader(new FileReader("file.txt")); 
// Read from sting 
BufferedReader reader = new BufferedReader(new StringReader("Some text")); 
Problemi correlati