2013-05-23 34 views
5

Sto provando a leggere una riga di file di testo separata da tabulazione per riga. Le righe sono separate usando carriage return ("\ r \ n") e LineFeed (\ "n") è consentito all'interno di campi di testo separati da tabulazioni.Java: Come leggere un file riga per riga ignorando " n"

Poiché desidero leggere la riga del file per riga, desidero che il mio programma ignori un "\ n" autonomo. Sfortunatamente, BufferedReader utilizza entrambe le possibilità per separare le linee. Come posso modificare il mio codice, per ignorare la versione autonoma "\ n"?

try 
{ 
    BufferedReader in = new BufferedReader(new FileReader(flatFile)); 
    String line = null; 
    while ((line = in.readLine()) != null) 
    { 
     String cells[] = line.split("\t");       
     System.out.println(cells.length); 
     System.out.println(line); 
    } 
    in.close(); 
} 
catch (IOException e) 
{ 
    e.printStackTrace(); 
} 

risposta

15

Utilizzare un java.util.Scanner.

Scanner scanner = new Scanner(new File(flatFile)); 
scanner.useDelimiter("\r\n"); 
while (scanner.hasNext()) { 
    String line = scanner.next(); 
    String cells[] = line.split("\t");       
    System.out.println(cells.length); 
    System.out.println(line); 
} 
+0

Grazie, funziona perfettamente! – Del

+0

Il nome del metodo è in realtà useDelimiter (le modifiche devono essere di almeno 6 caratteri, quindi non posso modificare personalmente la risposta) –

+0

@Krige - molto apprezzato. L'ho risolto – rolfl

0

Si potrebbe semplicemente rendere salta le righe vuote:

while ((line = in.readLine()) != null) { 
    // Skip lines that are empty or only contain whitespace 
    if (line.trim().isEmpty()) { 
     continue; 
    } 

    String[] cells = line.split("\t"); 
    System.out.println(cells.length); 
    System.out.println(line); 
} 
0

È possibile utilizzare metodi FileUtils.readLines da Apache commons-io.

Il vantaggio di utilizzarlo è che non ci si deve preoccupare dell'apertura e della chiusura del file. È gestito per te.