2011-10-29 21 views
5

En Java, ¿hay alguna manera de leer un archivo (archivo de texto) de forma que solo se lea un carácter a la vez, en lugar de Cadena por cadena? Esto es con el propósito de un analizador léxico extremadamente básico, para que pueda entender por qué me gustaría un método de este tipo. Gracias.Lectura desde el archivo de texto carácter por carácter

+0

En realidad, no lo entiendo; cómo manejas la entrada no es lo mismo que cómo la lees. IMO debes usar un lector de memoria intermedia y procesar la entrada carácter por carácter, no leerla explícitamente de esa manera. –

Respuesta

3

Puede leer todo el archivo (si no es mucho más grande) en la memoria como una cadena, y iterar sobre el carácter de la cadena de caracteres

+2

También no es una respuesta. – FailedDev

+1

Es una respuesta, ¿crees que debería contener un código para ser una respuesta? –

5

Aquí hay un código de ejemplo para la lectura/escritura de un carácter a la vez

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, esta respuesta se actualizó para copiar el código de muestra del enlace Ref, pero veo que esta es esencialmente la misma respuesta que se da a continuación.

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

+1

No es más una respuesta que un comentario. – FailedDev

+0

¿Miraste el enlace? Muestra cómo leer un archivo de texto carácter por carácter. –

+0

Ponlo en un comentario? – FailedDev

1

Usted puede utilizar el método de lectura de la clase InputStreamReader que se lee un carácter del flujo y devuelve -1 cuando llega al final de la secuencia

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

Hay varias posibles soluciones En general, se puede utilizar cualquier Reader de java.io paquete para caracteres de lectura, por ejemplo .:

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