Файлы .walk
API доступен с Java 8; он помогает обходить дерево файлов по заданному начальному пути.
Темы
- Файлы.прогулка() сигнатура метода
- Список всех файлов
- Перечислите все папки или каталоги
- Поиск файлов по расширению файла
- Поиск файлов по имени файла
- Поиск файлов по размеру файла
- Обновить все файлы дата последнего изменения
1. Подпись метода Files.walk()
Просмотрите файлы .прогулка ) подпись метода.
public static Streamwalk(Path start, FileVisitOption... options) throws IOException { return walk(start, Integer.MAX_VALUE, options); } public static Stream walk(Path start, int maxDepth, FileVisitOption... options) throws IOException {
-
Путь
, запускающий файл или папку. -
максимальная глубина
, максимальное количество уровней каталога для поиска, если опущено, по умолчаниюЦелое число. MAX_VALUE
, что означает2,147,483,647
уровни каталогов для поиска. Короче говоря, по умолчанию он будет выполнять поиск по всем уровням каталога. Если мы хотим выполнять поиск только из каталога верхнего уровня или корневого каталога, помещает1
. - Параметр
FileVisitOption
указывает, хотим ли мы переходить по символическим ссылкам, по умолчанию нет. Мы можем поставитьFileVisitOption. FOLLOW_LINKS
для перехода по символическим ссылкам.
2. Список всех файлов
В этом примере используется Файлы.перейдите
, чтобы вывести список всех файлов из каталога, включая все уровни подкаталогов (по умолчанию).
package com.mkyong.io.api; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class FilesWalkExample1 { public static void main(String[] args) throws IOException { Path path = Paths.get("C:\\test\\"); Listpaths = listFiles(path); paths.forEach(x -> System.out.println(x)); } // list all files from this path public static List listFiles(Path path) throws IOException { List result; try (Stream walk = Files.walk(path)) { result = walk.filter(Files::isRegularFile) .collect(Collectors.toList()); } return result; } }
Выход
C:\test\bk\logo-new.png C:\test\bk\New Text Document.txt C:\test\bk\readme.encrypted.txt C:\test\bk\readme.txt C:\test\data\ftp\google.png C:\test\example.json C:\test\google-decode.png C:\test\google.png
Если мы хотим перечислить файлы только из корневого каталога, поставьте максимальная глубина
.
try (Streamwalk = Files.walk(path, 1)) { result = walk.filter(Files::isRegularFile) .collect(Collectors.toList()); }
Выход
C:\test\example.json C:\test\google-decode.png C:\test\google.png
3. Перечислите все папки или каталоги
// list all directories from this path public static ListlistDirectories(Path path) throws IOException { List result; try (Stream walk = Files.walk(path)) { result = walk.filter(Files::isDirectory) .collect(Collectors.toList()); } return result; }
Выход
C:\test C:\test\bk C:\test\data C:\test\data\ftp C:\test\test1 C:\test\test1\test2
4. Поиск файлов по расширению файла
В этом примере используется Файлы.пройдите
, чтобы найти все текстовые файлы .текстовый
с тропинки.
package com.mkyong.io.api; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class FilesWalkExample4 { public static void main(String[] args) throws IOException { Path path = Paths.get("C:\\test\\"); Listpaths = findByFileExtension(path, ".txt"); paths.forEach(x -> System.out.println(x)); } public static List findByFileExtension(Path path, String fileExtension) throws IOException { if (!Files.isDirectory(path)) { throw new IllegalArgumentException("Path must be a directory!"); } List result; try (Stream walk = Files.walk(path)) { result = walk .filter(Files::isRegularFile) // is a file .filter(p -> p.getFileName().toString().endsWith(fileExtension)) .collect(Collectors.toList()); } return result; } }
Выход
C:\test\bk\New Text Document.txt C:\test\bk\readme.encrypted.txt C:\test\bk\readme.txt
5. Поиск файлов по имени файла
public static ListfindByFileName(Path path, String fileName) throws IOException { if (!Files.isDirectory(path)) { throw new IllegalArgumentException("Path must be a directory!"); } List result; // walk file tree, no more recursive loop try (Stream walk = Files.walk(path)) { result = walk .filter(Files::isReadable) // read permission .filter(Files::isRegularFile) // is a file .filter(p -> p.getFileName().toString().equalsIgnoreCase(fileName)) .collect(Collectors.toList()); } return result; }
6. Поиск файлов по размеру файла
Найдите все файлы, размер которых больше или равен 10 МБ.
package com.mkyong.io.api; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; // Files.walk example public class FilesWalkExample6 { public static void main(String[] args) throws IOException { Path path = Paths.get("C:\\test\\"); long fileSizeInBytes = 1024 * 1024 * 10; // 10MB Listpaths = findByFileSize(path, fileSizeInBytes); paths.forEach(x -> System.out.println(x)); } // fileSize in bytes public static List findByFileSize(Path path, long fileSize) throws IOException { if (!Files.isDirectory(path)) { throw new IllegalArgumentException("Path must be a directory!"); } List result; // walk file tree, no more recursive loop try (Stream walk = Files.walk(path)) { result = walk .filter(Files::isReadable) // read permission .filter(p -> !Files.isDirectory(p)) // is a file .filter(p -> checkFileSize(p, fileSize)) .collect(Collectors.toList()); } return result; } private static boolean checkFileSize(Path path, long fileSize) { boolean result = false; try { if (Files.size(path) >= fileSize) { result = true; } } catch (IOException e) { System.err.println("Unable to get the file size of this file: " + path); } return result; } }
7. Обновить все файлы дата последнего изменения
В этом примере обновлена дата последнего изменения всех файлов с пути до вчерашнего дня.
package com.mkyong.io.api; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.attribute.FileTime; import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.stream.Stream; public class FilesWalkExample7 { public static void main(String[] args) throws IOException { Path path = Paths.get("C:\\test\\"); Instant yesterday = Instant.now().minus(1, ChronoUnit.DAYS); setAllFilesModifiedDate(path, yesterday); } // set all files' last modified time to this instant public static void setAllFilesModifiedDate(Path path, Instant instant) throws IOException { try (Streamwalk = Files.walk(path)) { walk .filter(Files::isReadable) // read permission .filter(Files::isRegularFile) // file only .forEach(p -> { try { // set last modified time Files.setLastModifiedTime(p, FileTime.from(instant)); } catch (IOException e) { e.printStackTrace(); } }); } } }
Скачать Исходный Код
$клон git $клон git
$cd java-ввод-вывод
Рекомендации
- Файлы.прогулка JavaDoc
- Файлы Java.найдите примеры
- Java – Обновление даты последнего изменения файла
Оригинал: “https://mkyong.com/java/java-files-walk-examples/”