2013-05-23 31 views
5

Próbuję odczytać wiersz pliku z tekstem oddzielonym tabulatorami. Linie są oddzielone za pomocą znaku powrotu karetki ("\ r \ n"), a funkcja LineFeed (\ "n") jest dozwolona w polach tekstowych oddzielonych tabulatorami.Java: Odczytanie pliku wiersz po wierszu przez zignorowanie " n"

Ponieważ chcę przeczytać Linię pliku na linię, chcę, aby mój program ignorował autonomiczny "\ n". Niestety, BufferedReader używa obu możliwości oddzielenia linii. Jak mogę zmodyfikować mój kod, aby zignorować autonomiczny "\ 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(); 
} 

Odpowiedz

15

Użyj 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

Dzięki, to działa idealnie! – Del

+0

Nazwa metody to w rzeczywistości useDelimiter (edycja musi składać się z co najmniej 6 znaków, więc nie mogę samodzielnie edytować odpowiedzi) –

+0

@Krige - bardzo doceniane. Naprawiłem to. – rolfl

0

Można po prostu zrobić to pominąć puste wiersze:

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

Możesz użyć metod FileUtils.readLines z apache commons-io.

Zaletą korzystania z niego jest to, że nie musisz przejmować się otwieraniem i zamykaniem pliku. Jest to dla ciebie obsługiwane.