374. Java IO API - 创建与读取目录

0 阅读2分钟

374. Java IO API - 创建与读取目录

在 Java NIO 中,FilesPaths 提供了强大的工具来创建目录、列出目录内容和管理文件系统的根目录。本节将从实际应用角度,带你掌握这些 API 的使用方式。


🌐 列出文件系统的根目录

你可以通过 FileSystems.getDefault().getRootDirectories() 列出当前文件系统的所有根目录。这在 Windows 中通常是多个盘符(如 C:\D:\),在 Linux/Unix 下通常是 /

✅ 示例代码:
import java.nio.file.*;

public class ListRootDirs {
    public static void main(String[] args) {
        Iterable<Path> dirs = FileSystems.getDefault().getRootDirectories();
        for (Path name : dirs) {
            System.out.println("Root directory: " + name);
        }
    }
}

🛠️ 创建目录

你可以使用 Files.createDirectory() 创建一个新目录。该方法不会自动创建父目录,如果父目录不存在,则会抛出异常。

✅ 示例代码(使用默认权限):
import java.nio.file.*;

public class CreateDirectoryExample {
    public static void main(String[] args) throws Exception {
        Path dir = Paths.get("newFolder");
        Files.createDirectory(dir);
        System.out.println("Directory created: " + dir.toAbsolutePath());
    }
}

🔒 在 POSIX 文件系统中设置目录权限

如果你运行在 Linux/Unix 上,并希望设置权限,比如 rwxr-x---,可以使用 PosixFilePermissions

✅ 示例代码(带权限创建):
import java.nio.file.*;
import java.nio.file.attribute.*;
import java.util.*;

public class CreateDirectoryWithPerms {
    public static void main(String[] args) throws Exception {
        Path file = Paths.get("secureFolder");

        Set<PosixFilePermission> perms =
            PosixFilePermissions.fromString("rwxr-x---");
        FileAttribute<Set<PosixFilePermission>> attr =
            PosixFilePermissions.asFileAttribute(perms);

        Files.createDirectory(file, attr);
        System.out.println("Secure directory created: " + file);
    }
}

⚠️ 注意:Windows 不支持 POSIX 权限,运行以上代码将抛出异常。


📂 创建多级目录

有时你想要一次性创建一个目录树,如 foo/bar/test。使用 Files.createDirectories(),可以自动创建中间不存在的父目录。

✅ 示例代码:
import java.nio.file.*;

public class CreateDirectoriesExample {
    public static void main(String[] args) throws Exception {
        Path path = Paths.get("foo/bar/test");
        Files.createDirectories(path);
        System.out.println("Nested directories created: " + path.toAbsolutePath());
    }
}

🧠 小贴士:即使某些目录已存在,该方法也能安全运行而不会抛出异常。


🧪 创建临时目录

你可以使用 Files.createTempDirectory() 创建临时目录,这通常用于测试或临时存储文件。

✅ 示例 1:在系统默认的临时目录中创建
import java.nio.file.*;

public class TempDirExample {
    public static void main(String[] args) throws Exception {
        Path tempDir = Files.createTempDirectory("myapp-");
        System.out.println("Temporary directory created: " + tempDir);
    }
}
✅ 示例 2:在指定位置创建临时目录
import java.nio.file.*;

public class TempDirInCustomLocation {
    public static void main(String[] args) throws Exception {
        Path customLocation = Paths.get("tempArea");
        Files.createDirectories(customLocation); // 确保父目录存在
        Path tempDir = Files.createTempDirectory(customLocation, "session-");
        System.out.println("Temporary directory created: " + tempDir);
    }
}

⚠️ 注意:记得清理临时目录,避免资源泄漏。


🎯 总结与最佳实践

任务使用方法备注
列出根目录FileSystems.getDefault().getRootDirectories()遍历系统的根路径
创建目录(单层)Files.createDirectory()父目录必须存在
创建多级目录Files.createDirectories()自动创建所有不存在的父目录
创建临时目录Files.createTempDirectory()用于临时工作目录,可指定前缀与位置
创建目录并设置权限PosixFilePermissions仅在 POSIX 系统有效(Linux/Unix)