375. Java IO API - 列出目录内容

文章目录

  • [375. Java IO API - 列出目录内容](#375. Java IO API - 列出目录内容)
      • [🚀 核心方法简介](#🚀 核心方法简介)
      • [✅ 基本示例:打印目录内容](#✅ 基本示例:打印目录内容)
      • [🧹 try-with-resources 的重要性](#🧹 try-with-resources 的重要性)
      • [🎯 输出路径的完整形式(绝对路径)](#🎯 输出路径的完整形式(绝对路径))
      • [🔍 过滤目录内容(按扩展名或模式筛选)](#🔍 过滤目录内容(按扩展名或模式筛选))
        • [示例:只列出 `.txt` 文件](#示例:只列出 .txt 文件)
      • [⚠️ 异常处理说明](#⚠️ 异常处理说明)
      • [📌 小结对比:常用目录操作方式](#📌 小结对比:常用目录操作方式)

375. Java IO API - 列出目录内容

Java NIO 中,如果你想查看一个目录中的所有文件、子目录、符号链接等条目,推荐使用 Files.newDirectoryStream() 方法。这是一种高效、可扩展的方式,适用于大规模目录遍历


🚀 核心方法简介

java 复制代码
DirectoryStream<Path> stream = Files.newDirectoryStream(Path dir);
  • 返回一个 DirectoryStream<Path>,该接口本身实现了 Iterable<Path>
  • 支持高效迭代目录内容,适合目录下条目较多的情况。
  • 推荐使用 try-with-resources 自动关闭资源。

✅ 基本示例:打印目录内容

java 复制代码
import java.nio.file.*;
import java.io.IOException;

public class ListDirContents {
    public static void main(String[] args) {
        Path dir = Paths.get("your-directory-path-here");

        try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) {
            for (Path entry : stream) {
                System.out.println("Entry: " + entry.getFileName());
            }
        } catch (IOException | DirectoryIteratorException e) {
            System.err.println("Error reading directory: " + e.getMessage());
        }
    }
}

🧠 提示:

  • 使用 entry.getFileName() 获取文件名(而不是完整路径)。
  • 这是按目录中的顺序返回所有内容(包括隐藏文件、子目录、符号链接等)。

🧹 try-with-resources 的重要性

DirectoryStream 是一个可关闭资源,如果你不使用 try-with-resources,需要手动调用 stream.close(),否则可能导致资源泄露。

☕ 使用 Java 7+try-with-resources 可以确保在使用完毕后自动关闭流资源。


🎯 输出路径的完整形式(绝对路径)

你也可以输出完整路径,例如:

java 复制代码
System.out.println("Full path: " + entry.toAbsolutePath());

🔍 过滤目录内容(按扩展名或模式筛选)

你可以使用重载的 newDirectoryStream(Path dir, String glob) 方法对结果进行过滤。

示例:只列出 .txt 文件
java 复制代码
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, "*.txt")) {
    for (Path entry : stream) {
        System.out.println("Text file: " + entry.getFileName());
    }
}

🧠 Glob 模式支持:

  • "*.java" 匹配所有 Java 文件
  • "*.*" 匹配包含扩展名的所有文件
  • "data-??.log" 匹配如 data-01.logdata-99.log

⚠️ 异常处理说明

  • IOException:创建目录流时可能抛出,例如路径无效、无权限访问。
  • DirectoryIteratorException :在迭代过程中 出现异常,会被封装成此异常类型。根本原因可以通过 getCause() 访问。
java 复制代码
} catch (DirectoryIteratorException e) {
    System.err.println("Iterate failed: " + e.getCause());
}

📌 小结对比:常用目录操作方式

操作目标 使用方法
列出所有文件和子目录 Files.newDirectoryStream()
仅列出特定扩展名的文件 Files.newDirectoryStream(dir, "*.txt")
自动关闭目录流资源 使用 try-with-resources
获取文件名 entry.getFileName()
获取完整路径 entry.toAbsolutePath()
捕获迭代异常 捕获 DirectoryIteratorException
相关推荐
littleM3 小时前
深度拆解 HermesAgent(六):研究功能与测试体系
开发语言·人工智能·python·架构·ai编程
小年糕是糕手3 小时前
【C/C++刷题集】栈、stack、队列、queue核心精讲
c语言·开发语言·数据结构·数据库·c++·算法·蓝桥杯
geovindu3 小时前
go: Observer Pattern
开发语言·观察者模式·设计模式·golang
CHANG_THE_WORLD3 小时前
使用python调用podofogc文件 批量处理 pdf文件
windows·python·pdf
机跃3 小时前
指针(c++)
开发语言·c++
隔壁大炮3 小时前
CNN图像分类案例
人工智能·pytorch·python·深度学习·算法·分类·cnn
代码羊羊3 小时前
Rust Panic 深入全解:不可恢复错误的处理与原理
开发语言·后端·rust
深邃-3 小时前
【Web安全】-Kali,Linux配置(2):Java环境配置,Python环境配置,Conda使用,PIP配置使用,SSH远程登录
java·linux·python·安全·web安全·网络安全·php
枫叶丹43 小时前
【HarmonyOS 6.0】Call Service Kit VoIP接口Wearable设备支持详解:从手机到手表,VoIP通话的全场景延伸
开发语言·华为·智能手机·harmonyos
jjjava2.03 小时前
Java多线程编程:从入门到实战
java·开发语言