Jason. Cała informatyka w jednym miejscu!

Czas przyjrzeć się klasie "File", która występuje w języku Java. W tym artykule przedstawię Ci na czym ona polega i jakie przynosi korzyści stanowiące powód do korzystania z niej w swoich aplikacjach 💡.

PARĘ (A NAWET PARĘNAŚCIE) ZDAŃ O "FILE" W JĘZYKU JAVA

"File" jest klasą. "File" oznacza ścieżkę do pliku bądź katalogu (który też jest plikiem), lecz nie reprezentuje faktycznej zawartości. "File" zawiera metody dotyczące operowania na pliku oraz uzyskiwania informacji na jego temat. Możesz dowiedzieć się czy jest katalogiem, ile ma w sobie innych plików lub też przykładowo jak wygląda ścieżka do pliku, w którym się znajduje (czyli kto jest jego "rodzicem" 😁).

W punkcie pierwszym, importujesz ten oto pakiet:

import java. io.File;

W punkcie drugim, tworzysz sobie obiekt typu "File" definiując przykładowo w taki sposób:

File file = new File("test.txt");

Jest kilka konstruktorów, a to jest najprostsza forma. Parametr jaki przekazujesz jako łańcuch znaków, to tak naprawdę ścieżka do pliku. Sama nazwa z rozszerzeniem oznacza to, że plik znajdzie się w tym samym katalogu, w jakim znajduje się Twój program. To zależy od tego, czy korzystasz z wiersza poleceń, czy z IDE. Zależności między różnymi opcjami projektowania aplikacji zostały zawarte w artykule wprowadzającym do języka Java.

W pierwszym przypadku to będzie katalog, w jakim pracujesz, a w IDE to zazwyczaj główny katalog projektu tzw. "root" ("korzeń"). Korzystając z metody "getAbsolutePath" (więcej o niej w dalszej części), możesz poznać ścieżkę jaka zostanie przypisana plikowi podając samą jego nazwę 👍.

Możesz sobie zażyczyć, aby znalazł się on w jakimś katalogu 😊. Taki prosty przykład:

File file = new File("dir/test.txt");

NIE ZROZUM TEGO ŹLE

Miej na uwadze ważną rzecz - samo utworzenie obiektu "File" w języku Java nie wystarczy do tego, żeby plik faktycznie się pojawił. Należy wywołać metodę "createNewFile", która może zgłosić wyjątek w przypadku niepowodzenia:

File file = new File("test.txt");

try {
	boolean fileWasCreated = file.createNewFile();
} catch (Exception exception) {
	exception.printStackTrace();
}

Drugim sposobem jest podstawienie obiektu w miejsce strumienia (przepływ danych z przypisanym źródłem bądź miejscem docelowym), który odpowiada za operowanie na wskazanym pliku. "FileWriter" jest jednym z nich i utworzenie tej instancji, również spowoduje faktyczne utworzenie pliku we wskazanej ścieżce:

File file = new File("test.txt");

try {
	FileWriter fileWriter = new FileWriter(file);
	
	fileWriter.close();
} catch (Exception exception) {
	exception.printStackTrace();
}

Tylko pamiętaj, że strumienie także wymagają otoczki w postaci "try-catch"! Jeżeli przechwytywanie wyjątków jest Ci obce, koniecznie przeczytaj załączony artykuł 😉. I nie zapomnij zamknąć strumienia metodą "close"! O samej klasie "FileWriter" możesz przeczytać w osobnym wpisie.

Różnica między tymi sposobami jest istotna - gdy plik o podanej ścieżce już istnieje, "createNewFile" zignoruje tworzenie pliku, a strumień nadpisze go bez pytania o zdanie! Dobrą praktyką jest korzystanie z "File" podczas tworzenia jakichkolwiek obiektów strumieni, zamiast wpisywania tam bezpośrednio ścieżek do pliku (bo tak też można).

PRZYKŁADOWE METODY

Przechodzimy do metod. Pozwoliłem sobie wskazać 8 z nich, które uznałem za najciekawsze. Lecimy!

MKDIR

"File" w języku Java, jak wspomniałem, to nie tylko pliki trzymające dane. To mogą być także katalogi 📂. Metoda "mkdir" tworzy nowy katalog we wskazanej ścieżce:

File file = new File("dir/test");
boolean directoryWasCreated = file.mkdir();

Zwraca ona wartość logiczną ("boolean"), czyli czy się powiodło utworzenie katalogu, czy nie. To się często umieszcza bezpośrednio w instrukcji warunkowej do uwarunkowania jakichś instrukcji od tego, czy nowy katalog został utworzony.

CREATENEWFILE

"createNewFile" tworzy plik we wskazanej ścieżce, o ile jakiś inny o tej samej nazwie i rozszerzeniu już nie istnieje:

try {
	boolean fileWasCreated = file.createNewFile();
} catch (Exception exception) {
	exception.printStackTrace();
}

Ponieważ ta operacja obarczona jest ryzykiem niepowodzenia z powodu istnienia pliku, braku uprawnień do zapisu itp., może zgłosić wyjątek "IOException".

ISDIRECTORY

To Ci sprawdzi czy dany plik jest katalogiem, czy nie 📂:

boolean fileIsDirectory = file.isDirectory();

Oczywiście to zwraca "boolean".

LIST

"list" wbrew swojej nazwie, zwraca tablicę (a nie listę) łańcuchów znaków jako ścieżki plików jakie się znajdują w tym wskazanym. Krótko pisząc, zwraca listę plików znajdujących się w podanym:

String[] pathnames = file.list();

System.out. println(Arrays.toString(pathnames));

Oczywiście to zadziała w ten sposób wyłącznie, gdy plik jest katalogiem (przypominam, że "File" w języku Java może też reprezentować katalog). W innym wypadku, zwraca "null".

Używając statycznej metody "toString" z klasy "Arrays", można sobie wygodnie wypisać wszystkie nazwy w terminalu jakie zostały zidentyfikowane.

DELETE

"delete" kasuje podany plik definitywnie, nie wrzucając go do kosza:

boolean fileWasDeleted = file.delete();

Też zwraca "boolean" jako wynik działania czy się udało, czy nie (bo na przykład tego pliku już nie było wcześniej).

GETPARENT

"getParent" wypisuje ścieżkę do pliku "rodzica", czyli tego, który posiada w sobie plik o podanej ścieżce:

System.out. println(file.getParent());
GETFREESPACE

"getFreeSpace" zwraca liczbę typu "long" oznaczającą liczbę dostępnych (niezaalokowanych) bajtów na partycji, na której znajduje się plik (np. na dysku C):

System.out. println(file.getFreeSpace());

Jeżeli plik nie istnieje, zwraca na wyjściu 0 (zero).

GETABSOLUTEPATH

I na koniec, wspomniana na początku metoda "getAbsolutePath" pobierająca ścieżkę bezwzględną pliku:

System.out. println(file.getAbsolutePath());

Ścieżka bezwzględna oznacza ścieżkę wyznaczoną od samego początku "korzenia", jakim jest litera dysku, która idzie przez katalog nazwy użytkownika w systemie, aż do Twojego katalogu, w którym masz swój projekt 😄.

Klasa "File" w języku Java

"File" w języku Java to klasa uzyskująca informacje o pliku o podanej ścieżce podczas definiowania zmiennej. Żeby plik faktycznie został utworzony, należy skorzystać ze strumienia wyjściowego albo wywołać metodę "createNewFile".


Na tym zakończę artykuł o klasie "File" - oby Ci się przydała ta wiedza, Czytelniku 😎!

PODOBNE ARTYKUŁY