2011-02-17 1798 views
16

¿Cuál es la manera más rápida que puedo leer línea por línea con cada línea que contiene dos cadenas. Un ejemplo de archivo de entrada sería:La forma más rápida para leer un archivo línea por línea con 2 juegos de cuerdas en cada línea?

Fastest, Way 
To, Read 
One, File 
Line, By Line 
.... can be a large file 

Siempre hay dos juegos de cuerdas en cada línea que necesito, incluso si hay espacios entre la cadena, por ejemplo, "En Línea"

Actualmente estoy usando

FileReader a = new FileReader(file); 
      BufferedReader br = new BufferedReader(a); 
      String line; 
      line = br.readLine(); 

      long b = System.currentTimeMillis(); 
      while(line != null){ 

Es eso lo suficientemente eficaz o hay una manera más eficiente el uso de la API Java estándar (no hay fuera de las bibliotecas por favor) Cualquier ayuda se agradece Gracias!

+1

Cualquier tipo de lectura tamponada se probab Ly ser significativamente más rápido que el tiempo de búsqueda de la unidad que está leyendo el archivo. – biziclop

Respuesta

38

depende de lo qué se refiere cuando dice "eficiente". Desde el punto de vista del rendimiento, está bien. Si se está preguntando sobre el estilo y el tamaño del código, que pesonally hacer casi lo hace con una pequeña corrección:

 BufferedReader br = new BufferedReader(new FileReader(file)); 
     String line; 
     while((line = br.readLine()) != null) { 
      // do something with line. 
     } 

Para leer de STDIN Java 6 le ofrece otra manera. Uso clase Console y sus métodos

readLine() y readLine(fmt, Object... args)

1

Si desea separar dos juegos de cuerdas que pueden hacer esto de esta manera:

BufferedReader in = new BufferedReader(new FileReader(file)); 
String str; 
while ((str = in.readLine()) != null) { 
    String[] strArr = str.split(","); 
    System.out.println(strArr[0] + " " + strArr[1]); 
} 
in.close(); 
2
import java.util.*; 
import java.io.*; 
public class Netik { 
    /* File text is 
    * this, is 
    * a, test, 
    * of, the 
    * scanner, I 
    * wrote, for 
    * Netik, on 
    * Stack, Overflow 
    */ 
    public static void main(String[] args) throws Exception { 
     Scanner sc = new Scanner(new File("test.txt")); 
     sc.useDelimiter("(\\s|,)"); // this means whitespace or comma 
     while(sc.hasNext()) { 
      String next = sc.next(); 
      if(next.length() > 0) 
       System.out.println(next); 
     } 
    } 
} 

El resultado:

C:\Documents and Settings\glowcoder\My Documents>java Netik 
this 
is 
a 
test 
of 
the 
scanner 
I 
wrote 
for 
Netik 
on 
Stack 
Overflow 

C:\Documents and Settings\glowcoder\My Documents> 
Cuestiones relacionadas