Рубрики
Без рубрики

Файлы Java. прогулка примеры

API “Files.waik” доступен с Java 8; он помогает перемещаться по файловому дереву по заданному начальному пути.

Файлы .walk API доступен с Java 8; он помогает обходить дерево файлов по заданному начальному пути.

Темы

  1. Файлы.прогулка() сигнатура метода
  2. Список всех файлов
  3. Перечислите все папки или каталоги
  4. Поиск файлов по расширению файла
  5. Поиск файлов по имени файла
  6. Поиск файлов по размеру файла
  7. Обновить все файлы дата последнего изменения

1. Подпись метода Files.walk()

Просмотрите файлы .прогулка ) подпись метода.

    public static Stream walk(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\\");
        List paths = 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 (Stream walk = 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 List listDirectories(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\\");
        List paths = 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 List findByFileName(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

        List paths = 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 (Stream walk = 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-ввод-вывод

Рекомендации

Оригинал: “https://mkyong.com/java/java-files-walk-examples/”