Java Language
Nowy plik I / O
Szukaj…
Składnia
- Paths.get (najpierw String, String ... więcej) // Tworzy instancję Path na podstawie jej elementów String
- Paths.get (URI uri) // Tworzy instancję Path na podstawie URI
Tworzenie ścieżek
Klasa Path
służy do programowego reprezentowania ścieżki w systemie plików (i dlatego może wskazywać zarówno na pliki, jak i katalogi, nawet te nieistniejące)
Ścieżkę można uzyskać za pomocą klasy pomocniczej Paths
:
Path p1 = Paths.get("/var/www");
Path p2 = Paths.get(URI.create("file:///home/testuser/File.txt"));
Path p3 = Paths.get("C:\\Users\\DentAr\\Documents\\HHGTDG.odt");
Path p4 = Paths.get("/home", "arthur", "files", "diary.tex");
Pobieranie informacji o ścieżce
Informacje o ścieżce można uzyskać za pomocą metod obiektu Path
:
toString()
zwraca ciąg reprezentujący ścieżkęPath p1 = Paths.get("/var/www"); // p1.toString() returns "/var/www"
getFileName()
zwraca nazwę pliku (a ściślej ostatni element ścieżkiPath p1 = Paths.get("/var/www"); // p1.getFileName() returns "www" Path p3 = Paths.get("C:\\Users\\DentAr\\Documents\\HHGTDG.odt"); // p3.getFileName() returns "HHGTDG.odt"
getNameCount()
zwraca liczbę elementów tworzących ścieżkęPath p1 = Paths.get("/var/www"); // p1.getNameCount() returns 2
getName(int index)
zwraca element o podanym indeksiePath p1 = Paths.get("/var/www"); // p1.getName(0) returns "var", p1.getName(1) returns "www"
getParent()
zwraca ścieżkę katalogu nadrzędnegoPath p1 = Paths.get("/var/www"); // p1.getParent().toString() returns "/var"
getRoot()
zwraca katalog główny ścieżkiPath p1 = Paths.get("/var/www"); // p1.getRoot().toString() returns "/" Path p3 = Paths.get("C:\\Users\\DentAr\\Documents\\HHGTDG.odt"); // p3.getRoot().toString() returns "C:\\"
Manipulowanie ścieżkami
Łączenie dwóch ścieżek
Ścieżki można łączyć za pomocą metody resolve()
. Przekazana ścieżka musi być ścieżką częściową, która nie zawiera elementu głównego.
Path p5 = Paths.get("/home/");
Path p6 = Paths.get("arthur/files");
Path joined = p5.resolve(p6);
Path otherJoined = p5.resolve("ford/files");
joined.toString() == "/home/arthur/files"
otherJoined.toString() == "/home/ford/files"
Normalizowanie ścieżki
Ścieżki mogą zawierać elementy .
(który wskazuje katalog, w którym aktualnie się znajdujesz) i ..
(który wskazuje katalog nadrzędny).
Kiedy stosuje się w ścieżce .
można usunąć w dowolnym momencie bez zmiany miejsca docelowego ścieżki, a ..
można usunąć razem z poprzednim elementem.
W interfejsie API Paths odbywa się to za pomocą metody .normalize()
:
Path p7 = Paths.get("/home/./arthur/../ford/files");
Path p8 = Paths.get("C:\\Users\\.\\..\\Program Files");
p7.normalize().toString() == "/home/ford/files"
p8.normalize().toString() == "C:\\Program Files"
Pobieranie informacji za pomocą systemu plików
Do interakcji z systemem plików używasz metod klasy Files
.
Sprawdzanie istnienia
Aby sprawdzić istnienie pliku lub katalogu, do którego prowadzi ścieżka, użyj następujących metod:
Files.exists(Path path)
i
Files.notExists(Path path)
!Files.exists(path)
niekoniecznie musi być równa Files.notExists(path)
, ponieważ istnieją trzy możliwe scenariusze:
- Istnienie plik lub katalog jest weryfikowana (
exists
powracatrue
inotExists
powracafalse
w tym przypadku) - Nieistnienie pliku lub katalogu jest weryfikowane (
exists
zwracafalse
anotExists
zwracatrue
) - Nie można zweryfikować istnienia ani nieistnienia pliku lub katalogu (na przykład z powodu ograniczeń dostępu): zarówno
exists
inonExists
zwracają wartość false.
Sprawdzanie, czy ścieżka wskazuje plik lub katalog
Odbywa się to za pomocą Files.isDirectory(Path path)
i Files.isRegularFile(Path path)
Path p1 = Paths.get("/var/www");
Path p2 = Paths.get("/home/testuser/File.txt");
Files.isDirectory(p1) == true
Files.isRegularFile(p1) == false
Files.isDirectory(p2) == false
Files.isRegularFile(p2) == true
Uzyskiwanie właściwości
Można to zrobić za pomocą następujących metod:
Files.isReadable(Path path)
Files.isWritable(Path path)
Files.isExecutable(Path path)
Files.isHidden(Path path)
Files.isSymbolicLink(Path path)
Pobieranie typu MIME
Files.probeContentType(Path path)
To próbuje uzyskać typ pliku MIME. Zwraca ciąg typu MIME, taki jak ten:
-
text/plain
dla plików tekstowych -
text/html
dla stron HTML -
application/pdf
dla plików PDF -
image/png
dla plików PNG
Odczytywanie plików
Pliki mogą być odczytywane bajtowo i liniowo za pomocą klasy Files
.
Path p2 = Paths.get(URI.create("file:///home/testuser/File.txt"));
byte[] content = Files.readAllBytes(p2);
List<String> linesOfContent = Files.readAllLines(p2);
Files.readAllLines()
opcjonalnie przyjmuje zestaw znaków jako parametr (domyślnie jest to StandardCharsets.UTF_8
):
List<String> linesOfContent = Files.readAllLines(p2, StandardCharsets.ISO_8859_1);
Pisanie plików
Pliki można zapisywać bitowo i liniowo za pomocą klasy Files
Path p2 = Paths.get("/home/testuser/File.txt");
List<String> lines = Arrays.asList(
new String[]{"First line", "Second line", "Third line"});
Files.write(p2, lines);
Files.write(Path path, byte[] bytes)
Istniejące pliki zostaną zastąpione, nieistniejące pliki zostaną utworzone.