2015-09-29 23 views
5

Wiem, że metoda skip(long) przeskakuje z początkowej pozycji pliku i umieszcza wskaźnik pliku. Ale jeśli chcemy pominąć tylko 20 znaków w środku pliku i pozostałą część pliku do odczytania, co powinniśmy zrobić?Metoda pomijania() w IO java?

+0

'Pomiń' działa z aktualnej pozycji pliku. Do tekstu użyj czytnika (InputStreamReader łączy bajty binarne z tekstem Java w Unicode). Do buforowania użyj wersji Buffered ~. –

Odpowiedz

7

Powinieneś użyć BufferedReader. Metoda skip pomija znaki, a nie bajty.

Aby pominąć 20 znaki z istniejącej FileInputStream:

BufferedReader reader = new BufferedReader(new InputStreamReader(fileInputStream)); 
// read what you want here 
reader.skip(20); 
// read the rest of the file after skipping 
+0

Waooo, interesting –

+5

@QuanNguyen - Jako regułę kciuka pamiętaj, że * Strumienie działają na bajty, czytniki/pisarze działają na znakach * – TheLostMind

+0

Pamiętaj, że nawet 'BufferedReader.skip()' niekoniecznie musi robić dokładnie to, co chcesz, jeśli masz postacie spoza [BMP] (https://en.wikipedia.org/wiki/Plane_ (Unicode) #Basic_Multilingual_Plane). – Phylogenesis

2

mantain licznika.

Pętla wszystkich znaków zwiększających licznik dla każdego odczytu. Kiedy osiągniesz limit licznika odpowiadający początkowi znaków, które chcesz pominąć, pomiń znaki, które chcesz pominąć.

int counter = 0; 
while (counter < START_SKIP) { 
    int x = input.read(); 
    // Do something 
} 
input.skip(NUM_CHARS_TO_SKIP); 
... 
// Continue reading the remainings chars 

razie potrzeby użyć BufferedReader poprawić występy jako Tunaki powiedział (lub BufferedInputStream w zależności od typu pliku czytasz, jeśli plik binarny lub tekst).