Jak stwierdzili niektórzy ludzie, istnieją inne klasy, które zostały specjalnie zaprojektowane do czytania linii tekstu, takich jak BufferedReader. Jednakże, jeśli są wymagane do korzystania z RandomAccessFile, można przeczytać wiersze tekstu, ale trzeba programowo znaleźć gdzie 1 linia kończy i zaczyna się kolejna linia ...
Prostym przykładem może być ...
RandomAccessFile raf = new RandomAccessFile("c:\test.txt","r");
String line = "";
while (raf.available()){
byte b = raf.read();
if (b == '\n'){
// this is the end of the current line, so prepare to read the next line
System.out.println("Read line: " + line);
line = "";
}
else {
line += (char)b;
}
}
Daje to podstawowy blok konstrukcyjny dla czytnika, który szuka końca każdej linii.
Jeśli zamierzasz pójść ścieżką używania RandomAccessFile, możesz zacząć od tego schematu, ale musisz mieć świadomość wielu niedogodności i mieć takie ... 1. Używanie Unix i Windows różne markery linii - musisz szukać '\ n', '\ r' i kombinacji obu tych 2.Odczytanie pojedynczego bajtu na raz jest bardzo powolne - powinieneś przeczytać blok bajtów w buforze tablicowym (np. Tablica bajtów [2048]), a następnie iterować po tablicy, uzupełniając tablicę z RandomAccessFile po osiągnięciu końca tablica buforów. 3. Jeśli masz do czynienia ze znakami Unicode, musisz czytać i przetwarzać 2 bajty na raz, zamiast pojedynczych bajtów.
RandomAccessFile jest bardzo potężny, ale jeśli możesz użyć czegoś takiego jak BufferedReader, prawdopodobnie lepiej byłoby go użyć zamiast tego, ponieważ automatycznie zajmuje się tymi wszystkimi problemami.
Mam stały rekord długości .... pozwól mi sprawdzić, czy to działa .. – Nik
Proszę zobaczyć moje zaktualizowane pytanie .. gdzie jestem źle? – Nik
Każda linia zawiera \ n znak. Tak więc, w rzeczywistości powinieneś pominąć lineCount * (lineSize + 1). – mishadoff