Java DirectoryStream教程

Java DirectoryStream 教程显示了如何使用 DirectoryStream 遍历目录。

DirectoryStream是要遍历目录中条目的对象。 目录流允许方便地使用 for-each 构造来遍历目录。

Files.newDirectoryStream打开目录,返回DirectoryStream以遍历目录中的所有条目。

Java DirectoryStream示例

第一个示例列出了当前目录。

DirectoryStreamEx.java

package com.zetcode;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class DirectoryStreamEx {

    public static void main(String[] args) throws IOException {

        var dirName = Paths.get("C:/Users/Jano/Downloads");

        try (var paths = Files.newDirectoryStream(dirName)) {

            paths.forEach(path -> System.out.println(path));
        }
    }
}

该示例列出了指定目录的内容。

Java DirectoryStream遍历示例

我们可以对内容流应用简单的遍历操作。 Files.newDirectoryStream()的第二个参数是球形图案。

DirectoryStreamGlobEx.java

package com.zetcode;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class DirectoryStreamGlobEx {

    public static void main(String[] args) throws IOException {

        var dirName = Paths.get("C:/Users/Jano/Downloads");

        try (var paths = Files.newDirectoryStream(dirName, "*.pdf")) {

            paths.forEach(path -> System.out.println(path));
        }
    }
}

该示例显示指定目录中的所有 PDF 文件。

Java DirectoryStream过滤器示例

可以使用DirectoryStream.Filter应用更复杂的过滤操作。

DirectoryStreamFilterEx.java

package com.zetcode;

import java.io.IOException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class DirectoryStreamFilterEx {

    public static void main(String[] args) throws IOException {

        DirectoryStream.Filter<Path> filter = file -> {
            return Files.size(file) < 100_000L && file.toString().endsWith(".jpg");
        };

        var dirName = Paths.get("C:/Users/Jano/Downloads");

        try (var paths = Files.newDirectoryStream(dirName, filter)) {

            paths.forEach(path -> System.out.println(path));
        }
    }
}

该示例显示了所有小于 100 KB 的 JPEG 图像。

Java DirectoryStream递归遍历

在下面的示例中,我们显示如何使用DirectoryStream递归遍历目录。

DirectoryStreamRecursiveEx.java

package com.zetcode;

import java.io.IOException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

public class DirectoryStreamRecursiveEx {

    private static List<Path> paths = new ArrayList<>();

    private static List<Path> walk(Path path) throws IOException {

        try (DirectoryStream<Path> stream = Files.newDirectoryStream(path)) {

            for (Path entry : stream) {
                if (Files.isDirectory(entry)) {
                    walk(entry);
                }
                paths.add(entry);
            }
        }

        return paths;
    }

    public static void main(String[] args) throws IOException {

        var myPath = Paths.get("C:/Users/Jano/Downloads");

        var paths = walk(myPath);

        paths.forEach(path -> System.out.println(path));
    }
}

该示例以递归方式遍历目录。

在本教程中,我们使用Files.newDirectoryStream()列出目录内容。

赞(1)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

Java 教程