Java Language
Новый ввод-вывод файлов
Поиск…
Синтаксис
- Paths.get (String first, String ... more) // Создает экземпляр Path своими элементами String
- Paths.get (URI uri) // Создает экземпляр пути с помощью URI
Создание путей
Класс Path
используется для программного представления пути в файловой системе (и поэтому может указывать на файлы, а также на каталоги, даже на несуществующие)
Путь может быть получен с использованием класса-помощника 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");
Получение информации о пути
Информацию о пути можно получить с помощью методов объекта Path
:
toString()
возвращает строковое представление путиPath p1 = Paths.get("/var/www"); // p1.toString() returns "/var/www"
getFileName()
возвращает имя файла (или, более конкретно, последний элемент путиPath 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()
возвращает количество элементов, которые образуют путьPath p1 = Paths.get("/var/www"); // p1.getNameCount() returns 2
getName(int index)
возвращает элемент по данному индексуPath p1 = Paths.get("/var/www"); // p1.getName(0) returns "var", p1.getName(1) returns "www"
getParent()
возвращает путь родительского каталогаPath p1 = Paths.get("/var/www"); // p1.getParent().toString() returns "/var"
getRoot()
возвращает корень путиPath p1 = Paths.get("/var/www"); // p1.getRoot().toString() returns "/" Path p3 = Paths.get("C:\\Users\\DentAr\\Documents\\HHGTDG.odt"); // p3.getRoot().toString() returns "C:\\"
Пути манипулирования
Присоединение к двум путям
Пути можно объединить с помощью метода resolve()
. Прошедший путь должен быть частичным путем, который представляет собой путь, который не включает корневой элемент.
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"
Нормализация пути
Пути могут содержать элементы .
(который указывает на каталог, в котором вы сейчас находитесь) и ..
(что указывает на родительский каталог).
При использовании в пути, .
может быть удален в любое время , без изменения назначения по пути, и ..
может быть удален вместе с предыдущим элементом.
С API-интерфейсом Paths это выполняется с использованием .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"
Получение информации с использованием файловой системы
Чтобы взаимодействовать с файловой системой, вы используете методы класса Files
.
Проверка существования
Чтобы проверить наличие файла или каталога, на который указывает путь, вы используете следующие методы:
Files.exists(Path path)
а также
Files.notExists(Path path)
!Files.exists(path)
необязательно должен быть равен Files.notExists(path)
, поскольку существует три возможных сценария:
- Существование файла или каталога проверено (
exists
возвратtrue
аnotExists
возвращаетfalse
в этом случае) - Неизвестность файла или каталога verfied (
exists
возвращаетfalse
аnotExists
возвращаетtrue
) - Ни существование, ни отсутствие файла или каталога не могут быть проверены (например, из-за ограничений доступа): Both
exists
иnonExists
возвращают false.
Проверка того, указывает ли путь к файлу или каталогу
Это делается с использованием Files.isDirectory(Path path)
и 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
Получение свойств
Это можно сделать, используя следующие методы:
Files.isReadable(Path path)
Files.isWritable(Path path)
Files.isExecutable(Path path)
Files.isHidden(Path path)
Files.isSymbolicLink(Path path)
Получение типа MIME
Files.probeContentType(Path path)
Это пытается получить MIME-тип файла. Он возвращает строку типа MIME, например:
-
text/plain
для текстовых файлов -
text/html
для HTML-страниц -
application/pdf
для файлов PDF -
image/png
для файлов PNG
Чтение файлов
Файлы можно читать по байтам и по линиям, используя класс « 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()
необязательно принимает параметр charset в качестве параметра (по умолчанию используется StandardCharsets.UTF_8
):
List<String> linesOfContent = Files.readAllLines(p2, StandardCharsets.ISO_8859_1);
Написание файлов
Файлы можно записывать укусом и по очереди с использованием класса « 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)
Существующие файлы будут переопределены, будут созданы несуществующие файлы.