Java ma wiele narzędzi do obsługi plików, ponieważ służą one jako hurtownia danych w wielu aplikacjach. Często dostęp do plików jest wymagany w Java Java. Wszystkie klasy do pracy z plikami znajdują się w pakiecie java.io, który również przechowuje klasy do pracy ze strumieniami wejściowymi i wyjściowymi. Ściśle mówiąc, w Javie praca z plikami wynika głównie ze strumieni wejściowych i wyjściowych bajtów i znaków. Wyjątkiem jest klasa File. Zacznijmy od tego.
Plik klasy Java - praca z plikami
Plik klasy współdziała bezpośrednio z plikami i plikami. Instancja tej klasy służy przede wszystkim do uzyskiwania dostępu do właściwości plików i przechodzenia przez hierarchie podkatalogów. Nie definiuje sposobów wyodrębniania i zapisywania danych w pliku, ale dzięki tej klasie można uzyskać wiele informacji o pliku, dacie, godzinie, uprawnieniach i ścieżce do katalogu. W rzeczywistości klasa File jest specyficzną dla obiektu interpretacją pliku lub katalogu w Javie.
Aby utworzyć instancję klasy File, użyj jednego z jej konstruktorów: File (ścieżka do folderu, nazwa pliku String). Rozważ podstawowe metody tej klasy, które umożliwiają uzyskanie informacji o pliku lub katalogu:
getName () - zwraca nazwę pliku;
istnieje () - zwraca wartość logiczną prawda, jeśli plik istnieje, lub false w przeciwnym razie;
isFile () - definiuje, określa obiekt do pliku, zwracając odpowiednią wartość logiczną;
isDirectory () - zwraca wartość true, jeśli jest to folder;
canWrite () - zwraca true, jeśli plik jest dostępny do zapisu;
canRead ()- zwraca true, jeśli plik jest czytelny;
setReadOnly () - sprawia, że plik jest dostępny tylko do odczytu;
length () - zwraca rozmiar pliku w bajtach;
renameTo (File new name) - zmienia nazwę pliku zgodnie z przekazanym argumentem. Zwraca wartość true, jeśli operacja zakończyła się pomyślnie;
delete () - Usuwa plik lub folder (jeśli jest pusty) wskazany przez obiekt wywołujący;
list () - wypakowuje listę nazw obiektów przechowywanych w tym katalogu jako tablicę łańcuchów (dotyczy tylko katalogów).
Zatem użycie klasy File zapewnia pracę w Javie z plikami i folderami.
Praca z plikami przy użyciu klas FileInputStream i FileOutputStream
Wspominaliśmy, że w Javie praca z plikami odbywa się głównie przy użyciu strumieni We /Wy. Strumienie bajtów do pracy z plikami są reprezentowane jako klasy FileInputStream i FileOutputStream. Te klasy są spadkobiercami podstawowych klas abstrakcyjnych odpowiednio InputStream i OutputStream, więc metody tych klas są dostępne do pracy z plikami. Najpierw rozważ FileInputStream. Projektanci tej klasy przedstawiono na poniższym rysunku:
Pierwszy konstruktor przyjmuje jako argument ścieżkę do żądanego pliku w postaci ciągu, a drugi - w postaci reprezentacji obiektu. Chociaż pierwszy konstruktor jest częściej używany, w drugim przypadku możliwe jest zbadanie właściwości pliku dostępnego w metodach klasy File. Podczas tworzenia instancji klasy FileInputStream otwiera strumień wejściowy do odczytu pliku. Konstruktory klas FileOutputStream przedstawiono poniżej:
Sytuacjapodobna do FileInputStream, ale może również przyjmować wartość logiczną „dołączyć”, który po true wskazuje, że dane wynikające zapisu pliku dopysuvatysya do istniejących, a jeśli false - pójdzie pełne zastąpienie pliku, czyli stare dane zostaną utracone . Spójrzmy na przykład używając tych klas:
Strumień wejściowy
FileInputStream odczytuje dane z pliku file1.txt pobaytovo pomocą metody odczytu (). Każdy odczytany bajt jest przechowywany w całkowitej liczbie całkowitej. Następnie w pętli natomiast zmienna przekazywana jako argument do metody kopii napisać FileOutputStream, który pisze bajtów odebranych w file2.txt plików. Na końcu obu wątków zamknięcie obowiązkowe zamyka się metodą zamykania.
Klasy FileReader i FileWriter
Jeśli oczywiście wiedzieć, że podczas pracy z plikami masz do czynienia z tekstem, zamiast strumieni bajtowych sens używać znaku. Te wątki są reprezentowane przez klasy FileReader i FileWriter w Javie. Praca z plikami używającymi tych klas jest z grubsza taka sama jak w poprzednim przypadku. Są potomkami klas Reader i Writer, które definiują podstawowe metody dla danych wejściowych i wyjściowych. Projektanci klas FileReader i FileWriter przedstawiono na poniższym rysunku:
Zgadzam się, praktycznie nie ma różnic w semantykach w porównaniu ze strumieniami bajtów. Najważniejsze jest to, że te klasy zostały specjalnie zaprojektowane do pracy ze znakami w Unicode, których nie można wykonywać strumieniami bajtów. W ten sposób organizowane są pliki Java. Przykład użycia tych klas znajduje się poniżej:
Jak widać,nie zaobserwowano różnic. Warto zauważyć, że chociaż strumienie są symboliczne, to metoda read zwraca, a metoda zapisu przyjmuje wartość całkowitą. Chociaż metoda podpis obejmuje otrzymywanie zapisu argumenty typu int, napisane do strumienia tylko dolna 16 bitów jako znaki w Javie reprezentowana jest tak wiele bitów.
Wniosek
Zdemontowaliśmy więc podstawowe klasy do pracy z plikami w Javie. Warto zauważyć, że jeśli zamierzasz rozwijać Javę z Androida, możesz bezpiecznie korzystać z tego zestawu narzędzi.