1 klasaPath

Jeśli chcesz napisać program, który robi coś z plikami na dysku, możesz to zrobić bardzo łatwo. Java ma wiele klas, które pomagają pracować zarówno z samymi plikami, jak iz ich zawartością.

Wczesne wersje Javy wykorzystywały klasy takie jak Filei FileInputStream. Ale teraz klasa Filejest przestarzała, a jej użycie jest przestarzałe. Możesz oczywiście zobaczyć to również w kodzie, parametrach metod lub konstruktorach klas.

Naukę pracy z plikami zaczniemy od samego początku Path. Pathjest klasą, która zastąpiła File. Praca z nim jest bezpieczniejsza i wydajniejsza.

KlasaPath

Technicznie Pathnie jest to klasa, ale interfejs. Odbywa się to po to, abyś mógł napisać własnego dziedzica klasy do każdego systemu operacyjnego (i plików) Path.

Windows ma swoje własne standardy zapisywania ścieżek plików, Linux ma swoje własne. Ale na świecie wciąż istnieje wiele systemów operacyjnych, a każdy z nich ma swoje własne standardy.

Dlatego interfejs jest określony wszędzie w metodach pracy z plikami Path, ale w rzeczywistości praca przebiega z jego klasami potomnymi: WindowsPath, UnixPath, ...

Utwórz obiektPath

Aby utworzyć obiekt Path(w rzeczywistości będzie to obiekt klasy pochodnej - WindowsPath), należy użyć polecenia formularza:

Path Nazwa = Path.of(путь);

Gdzie Nazwajest nazwą zmiennej typu Path. путьto ścieżka do pliku (lub katalogu) wraz z nazwą pliku (lub katalogu). A ofjest metodą klasy statycznej Path.

Metoda of()służy do tworzenia obiektów typu, WindowsPathjeśli program jest uruchamiany w systemie Windows, a jeśli program jest uruchamiany w systemie Linux, obiekty UnixPath. Nie można utworzyć obiektu typu Pathza pomocą kodu widoku .new Path()

Przykłady:

Kod Notatka
Path file = Path.of("c:\\projects\\note.txt");
Ścieżka do pliku
Path directory = Path.of("c:\\projects\\");
Ścieżka katalogu

Plik (lub katalog) nie musi istnieć dla prawidłowego obiektu typu Path. Może po prostu chcesz utworzyć plik... Obiekt typu Pathjest jak zaawansowana wersja typu String- nie jest powiązany z konkretnym plikiem na dysku: po prostu przechowuje ścieżkę na dysku i to wszystko.


2. Wpisz metodyPath

Interfejs Pathma całkiem sporo ciekawych metod. Najciekawsze przedstawia poniższa tabela.

metoda Opis
Path getParent()
Zwraca katalog nadrzędny
Path getFileName()
Zwraca nazwę pliku bez katalogu
Path getRoot()
Zwraca katalog główny ze ścieżki
boolean isAbsolute()
Sprawdza, czy bieżąca ścieżka jest bezwzględna
Path toAbsolutePath()
Konwertuje ścieżkę na wartość bezwzględną
Path normalize()
Usuwa symbole wieloznaczne w nazwie katalogu.
Path resolve(Path other)
Tworzy nową ścieżkę bezwzględną ze ścieżki bezwzględnej i ścieżki względnej.
Path relativize(Path other)
Pobiera ścieżkę względną z dwóch ścieżek bezwzględnych.
boolean startsWith(Path other)
Sprawdza, czy bieżąca ścieżka zaczyna się od ścieżki
boolean endsWith(Path other)
Sprawdza, czy bieżąca ścieżka kończy się na path
int getNameCount()
Dzieli ścieżkę na części za pomocą ogranicznika /.
Zwraca liczbę części.
Path getName(int index)
Dzieli ścieżkę na części za pomocą ogranicznika /.
Zwraca część według jej numeru.
Path subpath(int beginIndex, int endIndex)
Dzieli ścieżkę na części za pomocą ogranicznika /.
Zwraca część ścieżki określoną przez interwał.
File toFile()
Konwertuje obiekt Pathna przestarzały obiektFile
URI toUri()
Konwertuje obiekt Pathna obiekt typuURI

Poniżej znajduje się krótki opis istniejących metod.


3. Podział ścieżki na części

Metoda getParent()zwraca ścieżkę wskazującą katalog nadrzędny dla bieżącej ścieżki. Niezależnie od tego, czy ta ścieżka była katalogiem, czy plikiem:

Kod Oznaczający
String str = "c:\\windows\\projects\\note.txt";
Path path = Path.of(str).getParent();
"c:\\windows\\projects\\"
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getParent();
"c:\\windows\\"
String str = "c:\\";
Path path = Path.of(str).getParent();
null

Metoda getFileName()zwraca pojedynczą nazwę pliku (lub katalogu) — cokolwiek następuje po ostatnim ograniczniku:

Kod Oznaczający
String str = "c:\\windows\\projects\\note.txt";
Path path = Path.of(str).getFileName();
"note.txt"
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getFileName();
"projects"
String str = "c:\\";
Path path = Path.of(str).getFileName();
null

Metoda getRoot()zwraca ścieżkę do katalogu głównego:

Kod Oznaczający
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getRoot();
"c:\\"


4. Ścieżki bezwzględne i względne

Istnieją dwa rodzaje ścieżek: bezwzględna i względna. Ścieżka bezwzględna zaczyna się od katalogu głównego. W systemie Windows może to być folder c:\, w systemie Linux może to być katalog/

Ścieżka względna jest uważana za względną w stosunku do jakiegoś katalogu. Te. to jak koniec drogi, ale bez początku. Ścieżkę względną można zmienić na ścieżkę bezwzględną i odwrotnie

metodaboolean isAbsolute()

Metoda sprawdza, czy bieżąca ścieżka jest bezwzględna

Kod Oznaczający
String str = "c:\\windows\\projects\\note.txt";
boolean abs = Path.of(str).isAbsolute();
true
String str = "src\\com\\codegym\\Main.java";
boolean abs = Path.of(str).isAbsolute();
false

metodaPath toAbsolutePath()

W razie potrzeby zamienia ścieżkę na bezwzględną - dodaje do niej bieżący katalog roboczy:

Kod Oznaczający
String str = "c:\\windows\\projects\\note.txt";
Path path = Path.of(str).toAbsolutePath();
"c:\\windows\\projects\\note.txt"
String str = "src\\com\\codegym\\Main.java";
Path path = Path.of(str).toAbsolutePath();
"d:\\work\\src\\com\\codegym\\Main.java"

metodaPath normalize()

W ścieżce zamiast nazwy katalogu można napisać „..”, a to oznacza powrót o jeden katalog z powrotem. Normalizacja eliminuje te rzeczy. Przykłady:

Kod Oznaczający
String str = "c:\\windows\\..\\projects\\note.txt";
Path path = Path.of(str).normalize();
"c:\\projects\\note.txt"
String str = "src\\com\\codegym\\..\\Main.java";
Path path = Path.of(str).normalize();
"src\\com\\Main.java"

metodaPath relativize(Path other)

Metoda relativize()pozwala obliczyć „różnicę ścieżek”: jedną ścieżkę względem drugiej

Kod Oznaczający
Path path1 = Path.of("c:\\windows\\projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path2.relativize(path1);
"projects\\note.txt"
Path path1 = Path.of("c:\\windows\\projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path1.relativize(path2);
"..\\.."
Path path1 = Path.of("c:\\aaa\\bbb\\1.txt");
Path path2 = Path.of("d:\\zzz\\y.jpg");
Path result = path1.relativize(path2);
Błąd IllegalArgumentException:
dwie ścieżki mają inny „root” (różne dyski)

metodaPath resolve(Path other)

Metoda resolve()wykonuje operację odwrotną relativize(): buduje nową ścieżkę bezwzględną ze ścieżki bezwzględnej i względnej.

Kod Oznaczający
Path path1 = Path.of("projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path1.resolve(path2);
"c:\\windows"
Path path1 = Path.of("projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path2.resolve(path1);
"c:\\windows\\projects\\note.txt"

metodatoFile()

Metoda zwraca nieaktualny obiekt File, który przechowuje tę samą ścieżkę do pliku co Path.

metodatoURI()

Metoda konwertuje ścieżkę na standard URI , zwraca obiekt zawierający ścieżkę do pliku:

Ścieżka do pliku URI do pliku
c:\windows\projects\note.txt
file:///c:/windows/projects/note.txt