Jak czytać z lokalnego pliku w Javie

Jak czytać z lokalnego pliku w Javie
Lokalny plik znajduje się na dysku twardym lub dysku flash podłączony do portu USB. Pliki można podzielić na dwie kategorie: pliki tekstowe i pliki bajtów. Typowe pliki tekstowe to pliki utworzone przez edytor tekstu. Plik obrazu jest przykładem pliku bajtów składającego się głównie z surowych bajtów.

W tym artykule zawiera podstawowe wyjaśnienie, jak czytać tekst lokalny i bajty w Javie. Aby odczytać plik tekstowy, użyj klasy, FileReader. Aby odczytać plik bajtów, użyj klasy, FileInputStream. Obie klasy są w Javie.io.* Pakiet, który należy zaimportować. Pierwsza połowa tego artykułu dotyczy czytania plików tekstowych, a druga połowa dotyczy czytania plików bajtów.

Czytanie plików tekstowych

Konstruowanie obiektu FileReadera

Przed dowiedzieć się, jak budować obiekt FileReader, utwórz następujący plik tekstowy z edytorem tekstu i naciśnij klawisz Enter na końcu dwóch pierwszych wierszy:

Tekst 1 a tekst 1 a tekst 1 a tekst 1 a tekst 1
B Tekst 2 B Tekst 2 B Tekst 2 B Tekst 2 B Tekst 2
C Text 3 C Tekst 3 C Tekst 3 C Tekst 3 C Tekst 3

Jeśli klawisz ENTER nie jest naciskany na końcu ostatniego wiersza, edytor tekstu może dodać nową linię po zapisaniu pliku. Po wyprodukowaniu poprzedniego tekstu zapisz treść, za pomocą temperatury nazwy.TXT, za pomocą menu edytora tekstu, użytkownika@host: ~/dir1 $, w katalogu. Oznacza to, że katalog, DIR1, powinien zostać stworzony.

Konstruowanie czytnika plików

Klasa FileReader ma pięć konstruktorów. Tylko jeden jest zilustrowany w tym artykule (aby artykuł był krótki). Składnia konstruktora to:

Public FileReader (nazwa pliku ciągów) rzuca FillenotFoundException

Jest to tworzone w pamięci strumień (kopia) pliku, którego ścieżka i nazwa to ciąg, nazwa pliku. Rzuca FillenotFoundException, jeśli plik nie zostanie znaleziony we wskazanym katalogu. Po skopiowaniu zawartości pliku otwarty obiekt pliku musi zostać zamknięty, aby zwolnić wszelkie zasoby systemowe powiązane z otwartym plikiem.

Ważne metody FileReadera

Jeśli konstruktor zostanie pomyślnie utworzony, plik jest uważany za otwarty. Po użyciu pliku plik musi zostać zamknięty. Składnia do zamykania pliku to:

public void close () rzuca ioException

Po właśnie otwarciu pliku skuteczne odczyt pliku nie nastąpiło jeszcze. Aby przeczytać jedną postać na raz (po drugiej), zastosuj składnię metody FileReadera:

public int read () rzuca ioException

Zwraca to znak (jako liczbę całkowitą) odczyt lub -1 Jeśli osiągnięto koniec strumienia (przepływ kopii pliku).

Aby odczytać następną sekwencję znaków pliku, do tablicy, zastosuj składnię metody FileReader:

public int Read (Char [] cbuf, int off, int len) rzuca ioException

Zwraca liczbę znaków odczytu lub -1, jeśli osiągnięto koniec strumienia. WYŁ. W składni oznacza przesunięcie. Jest to indeks w pliku, w którym odczyt następującej sekwencji znaków ma się rozpocząć. Len to liczba znaków do przeczytania. Powinna to być długość tablicy, podczas gdy CBUF jest tablicą. Sekwencja znaków jest odczytywana.

Pamiętaj, że obiekt FileReader musi zostać zamknięty metodą zamknięcia po tym skutecznym odczytaniu.

Składnia metody, aby wiedzieć, czy następny odczyt nie zwróci -1, to:

Public Boolean Ready () rzuca ioException

Zwraca prawdę, jeśli jest coś do odczytania, a w przeciwnym razie fałszywe.

Czytanie w ciągu

Poniższy kod odczytuje poprzedni plik, znak po charakterze, do ciągu StringBuilder:

StringBuilder sb = nowy StringBuilder ();
próbować
FileReaderfr = nowy FileReader („DIR1/TEMP.tekst");
While (fr.gotowy())
char ch = (char) fr.Czytać();
sb.append (CH);


Catch (wyjątek e)
mi.getMessage ();

System.na zewnątrz.println (sb);

Kod zaczyna się od instancji obiektu StringBuilder, SB. Następnie jest konstrukt próba. Block trybu zaczyna się od tworzenia instancji FileReadera, fr. I jest pętla pobytu, która iteruje, aż Ready () zwróci false. Pierwsze stwierdzenie w pętli while odczytuje i zwraca następną postać jako liczbę całkowitą. Musi zostać obsadzony na Char. Następna instrukcja w While pętli dołącza następny znak do ciągu, SB. Wyjście to:

Tekst 1 a tekst 1 a tekst 1 a tekst 1 a tekst 1
B Tekst 2 B Tekst 2 B Tekst 2 B Tekst 2 B Tekst 2
C Text 3 C Tekst 3 C Tekst 3 C Tekst 3 C Tekst 3

Jest to dokładnie treść pliku, ale dodała dodatkową linię na komputerze autora.

Czytanie w tablicy

Czytając w tablicy, zawartość tablicy musi zostać wydana, aby następna sekwencja znaków zostanie przeczytana. Poniższy kod to ilustruje:

StringBuilder sb = nowy StringBuilder ();
próbować
FileReaderfr = nowy FileReader („DIR1/TEMP.tekst");
While (fr.gotowy())
char [] arr = nowy char [5];
int offset = 0;
Fr.odczyt (ARR, offset, 5);
offset = offset + 5;
System.na zewnątrz.druk (ARR);


Catch (wyjątek e)
mi.getMessage ();

System.na zewnątrz.println ();

Wartość przesunięcia należy zwiększyć dla każdej iteracji o długość tablicy. Wyjście to:

Tekst 1 a tekst 1 a tekst 1 a tekst 1 a tekst 1
B Tekst 2 B Tekst 2 B Tekst 2 B Tekst 2 B Tekst 2
C Text 3 C Tekst 3 C Tekst 3 C Tekst 3 C Tekst 3

Jest dokładnie taka jak zawartość pliku, ale dodała dodatkową linię na komputerze autora.

Czytanie plików bajtów

Konstruowanie obiektu FileInputStream

Poniższy plik obrazu nazywa się słupkami.png. Jest w katalogu użytkownika@host: ~/dir1 $, który jest tym samym katalogiem co temp.tekst. Składa się z zaledwie trzech barów:

Konstruowanie plikuInputStream

Konstruktor obiektu FileInputStream to:

public FileInputStream (nazwa ciągu) rzuca FillenotFoundException

Ponieważ rzuca wyjątek, powinien być w konstrukcji Try-Catch. Pamiętaj, że ta klasa jest przeznaczona do czytania bajtów.

Ważne metody FileInputStream

Jeśli konstruktor zostanie pomyślnie utworzony, plik jest uważany za otwarty. Po przeczytaniu bajtów plik musi zostać zamknięty, stosując następującą składnię:

public void close () rzuca ioException

Po właśnie otwarciu pliku skuteczne odczyt pliku nie nastąpiło jeszcze. Aby przeczytać jeden bajt na raz (jeden, następny), zastosuj składnię metody FileInputStream:

public int read () rzuca ioException

Zwraca bajt (jako liczbę całkowitą) odczyt lub -1 Jeśli osiągnięto koniec strumienia (przepływ kopii pliku).

Pamiętaj, że po tym skutecznym odczytaniu obiekt FileInputStream musi zostać zamknięty, z metodą zamknięcia.

Aby oszacować liczbę pozostałych bajtów do odczytania, zastosuj składnię metody:

public int dostępny () rzuca ioException

Ponieważ ta metoda zwraca oszacowanie, gdy jest używana w połączeniu z Read (), nie można mieć pewności, że wszystkie bajty pliku zostały odczytane. I należy preferować następującą metodę odczytu wszystkich bajtów:

Public Bajte [] ReadallBytes () rzuca IoException

Ta metoda zwraca wszystkie pozostałe bajty, ale nadal czytałaby cały plik.

Czytanie w arraylist

ArrayList musi być importowany z Java.Util.* pakiet. Poniższy kod odczytuje oszacowanie wszystkich bajtów w obiekcie ArrayList:

ArrayList al = new ArrayList ();
próbować
FileInputStream FIR = new FileInputStream („Dir1/Bars.png ");
When (FIR.Dostępne ()> 0)
bajt bt = (bajt) jodł.Czytać();
glin.Dodaj (bt);


Catch (wyjątek e)
mi.getMessage ();

System.na zewnątrz.println (al);

Kod zaczyna się od instancji obiektu ArrayList, Al. Następnie jest konstrukt próba. Block trybu zaczyna się od instancji plikuInputStream, FIR. I jest pętla pobytu, która iteruje do momentu dostępnego () i sugeruje, że nie ma się odczytać żadnego bajtu. Pierwsze stwierdzenie w pętli podczas pobytu brzmi i zwraca następny bajt jako liczbę całkowitą. Musi zostać rzucony na bajt. Następna instrukcja w pobycie dołącza (dodaje) następny znak do listy, AL. Wyjście to:

[-119, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, -7, 0, 0, 0, - 10, 8, 6, 0, 0, 0, 20, 25, 33, 69, 0, 0, 0, 6, 98, 75, 71, 68, 0, -1, 0, -1, 0, -1 , -96, -67, -89, -109, 0, 0, 3, 48, 73, 68, 65, 84, 120, -100, -19, -42, 49, 74, 67, 81, 0, 68, -47, -81, -68, 52, 105, 83, -120, 85, 42, 65, -112, -12, 41, 44, 92, 64, -74, -26, 34, 92, -110, -115, -107, 32, -23, -19, 44, 4, 9, -60, 85, 60, 62, 92, -50, 89, -63, 52, 23, -26, - - - 26, -70, 44, -41, 5, 104, 58, -99 - - i kontynuuje - - -]

Bajty to liczby całkowite. Mamy nadzieję, że obraz poprzednich trzech barów składa się z tych wszystkich bajtów. Pomysł polega na zmianie niektórych bajtów, zmodyfikowania obrazu, a następnie zapisania wyniku; Następnie ponownie przełącz go za pomocą obrazu obrazu podczas prezentacji zmodyfikowanego obrazu. Jednak ten dodatkowy harmonogram nie jest adresowany w tym artykule.

Czytanie w tablicy

Metoda ReadallBytes () zwraca szereg bajtów. Tak więc, po prostu odbieraj wartości zwrotne z tablicą bajtów, jak pokazuje następujący kod:

bajt [] arr = nowy bajt [1000];
próbować
FileInputStream FIR = new FileInputStream („Dir1/Bars.png ");
ARR = FIR.ReadallBytes ();

Catch (wyjątek e)
mi.getMessage ();

dla (int i = 0; iSystem.na zewnątrz.print (arr [i] + ",");
System.na zewnątrz.println ();

Kod zaczyna się od deklaracji tablicy, która odbędzie bajty. Rozmiar (długość) tutaj powinien być powyżej szacowanego rozmiaru. Szacowany rozmiar można uzyskać za pomocą metody dostępnej (). Główny kod jest w bloku trybu. Wyjście to:

-119, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, -7, 0, 0, 0, -10, 8, 6, 0, 0, 0, 20, 25, 33, 69, 0, 0, 0, 6, 98, 75, 71, 68, 0, -1, 0, -1, 0, -1, - 96, -67, -89, -109, 0, 0, 3, 48, 73, 68, 65, 84, 120, -100, -19, -42, 49, 74, 67, 81, 0, 68, -47, -81, -68, 52, 105, 83, -120, 85, 42, 65, -112, -12, 41, 44, 92, 64, -74, -26, 34, 92, -110 , -115, -107, 32, -23, -19, 44, 4, 9, -60, 85, 60, 62, 92, -50, 89, -63, 52, 23, -26, -26, -70, 44, -41, 5, 104, 58, -99, - - i kontynuuje - - -

To wyjście i poprzednie są takie same na komputerze autora.

Wniosek

Lokalne pliki tekstowe i bajtów można odczytać. Aby odczytać plik tekstowy, użyj klasy strumieniowej, FileReader. Aby odczytać plik bajtów, użyj klasy strumieniowej, FileInputStream. Obie klasy są w Javie.io.* Pakiet, który należy zaimportować. Te dwie klasy mają konstruktory i metody, które umożliwiają odczyt. Mamy nadzieję, że thid artykuł jest pomocny. Sprawdź inne artykuły w Linux, aby uzyskać więcej wskazówek i samouczków.