Java NIO - ścieżka
Jak sama nazwa wskazuje, Ścieżka to konkretna lokalizacja jednostki, takiej jak plik lub katalog w systemie plików, dzięki czemu można wyszukiwać i uzyskiwać do nich dostęp w tej konkretnej lokalizacji.
Z technicznego punktu widzenia, ścieżka jest interfejsem, który jest wprowadzany w pakiecie plików Java NIO w wersji Java 7 i jest reprezentacją lokalizacji w danym systemie plików.Jako interfejs ścieżki znajduje się w pakiecie Java NIO, więc otrzymuje kwalifikowaną nazwę java .nio.file.Path.
Ogólnie ścieżka jednostki może być dwojakiego rodzaju, jedna to ścieżka bezwzględna, a druga to ścieżka względna.Jak nazwa obu ścieżek sugeruje, że ścieżka bezwzględna jest adresem lokalizacji od źródła do jednostki, w której się znajduje, podczas gdy ścieżka względna jest adresem lokalizacji która jest względna w stosunku do innej ścieżki. Ścieżka używa separatorów w swojej definicji jako „\” dla systemu Windows i „/” dla systemów operacyjnych unix.
W celu pobrania instancji Path możemy skorzystać ze statycznej metody klasy java.nio.file.Paths get()Ta metoda konwertuje ciąg ścieżki lub sekwencję ciągów, które po połączeniu tworzą ciąg ścieżki, na instancję Path.Ta metoda również generuje wyjątek InvalidPathException środowiska wykonawczego, jeśli przekazane argumenty zawierają niedozwolone znaki.
Jak wspomniano powyżej, ścieżka bezwzględna jest pobierana przez przekazanie elementu głównego i pełnej listy katalogów wymaganych do zlokalizowania pliku, podczas gdy ścieżkę względną można pobrać, łącząc ścieżkę podstawową ze ścieżką względną. Pobieranie obu ścieżek byłoby zilustrowane w poniższym przykładzie
Przykład
package com.java.nio;
import java.io.IOException;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.file.FileSystem;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.nio.file.Paths;
public class PathDemo {
public static void main(String[] args) throws IOException {
Path relative = Paths.get("file2.txt");
System.out.println("Relative path: " + relative);
Path absolute = relative.toAbsolutePath();
System.out.println("Absolute path: " + absolute);
}
}
Jak dotąd wiemy, co to jest interfejs ścieżki, dlaczego tego potrzebujemy i jak możemy uzyskać do niego dostęp. Teraz będziemy wiedzieć, jakie są ważne metody, które zapewnia nam interfejs Path.
Ważne metody interfejsu ścieżki
getFileName() - Zwraca system plików, który utworzył ten obiekt.
getName() - Zwraca element nazwy tej ścieżki jako obiekt Path.
getNameCount() - Zwraca liczbę elementów nazwy w ścieżce.
subpath() - Zwraca ścieżkę względną, która jest podciągiem elementów nazwy tej ścieżki.
getParent() - Zwraca ścieżkę nadrzędną lub null, jeśli ta ścieżka nie ma rodzica.
getRoot() - Zwraca główny składnik tej ścieżki jako obiekt Path lub wartość null, jeśli ta ścieżka nie ma składnika głównego.
toAbsolutePath() - Zwraca obiekt Path reprezentujący bezwzględną ścieżkę tej ścieżki.
toRealPath() - Zwraca rzeczywistą ścieżkę do istniejącego pliku.
toFile() - Zwraca obiekt File reprezentujący tę ścieżkę.
normalize() - Zwraca ścieżkę, która jest tą ścieżką z wyeliminowanymi zbędnymi elementami nazwy.
compareTo(Path other) - Porównuje dwie abstrakcyjne ścieżki leksykograficznie.Ta metoda zwraca zero, jeśli argument jest równy tej ścieżce, wartość mniejszą niż zero, jeśli ta ścieżka jest leksykograficznie mniejsza niż argument, lub wartość większą niż zero, jeśli ta ścieżka jest leksykograficznie większa niż argument .
endsWith(Path other) - Testuje, czy ścieżka kończy się podaną ścieżką Jeśli dana ścieżka ma N elementów i nie ma komponentu głównego, a ta ścieżka ma N lub więcej elementów, to ścieżka kończy się podaną ścieżką, jeśli ostatnie N elementów każdej ścieżki, zaczynając od elementu najbardziej oddalonego od korzenia, są równe.
endsWith(String other) - Testuje, czy ta ścieżka kończy się Path, skonstruowaną przez konwersję podanego ciągu ścieżki, dokładnie w sposób określony przez metodę endWith (Path).
Przykład
Poniższy przykład ilustruje różne metody interfejsu Path, które zostały wymienione powyżej -
package com.java.nio;
import java.io.IOException;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.file.FileSystem;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.nio.file.Paths;
public class PathDemo {
public static void main(String[] args) throws IOException {
Path path = Paths.get("D:/workspace/ContentW/Saurav_CV.docx");
FileSystem fs = path.getFileSystem();
System.out.println(fs.toString());
System.out.println(path.isAbsolute());
System.out.println(path.getFileName());
System.out.println(path.toAbsolutePath().toString());
System.out.println(path.getRoot());
System.out.println(path.getParent());
System.out.println(path.getNameCount());
System.out.println(path.getName(0));
System.out.println(path.subpath(0, 2));
System.out.println(path.toString());
System.out.println(path.getNameCount());
Path realPath = path.toRealPath(LinkOption.NOFOLLOW_LINKS);
System.out.println(realPath.toString());
String originalPath = "d:\\data\\projects\\a-project\\..\\another-project";
Path path1 = Paths.get(originalPath);
Path path2 = path1.normalize();
System.out.println("path2 = " + path2);
}
}