361. Java IO API - 了解文件存储设备
在 Java NIO 中,FileStore 表示文件系统中的一个存储设备或卷。例如:
- 在 Unix/Linux 系统中,每个挂载的文件系统(如
/,/home,/mnt/usb)都被视为一个FileStore。 - 在 Windows 中,每个卷(如 C:\、D:\)都映射为一个
FileStore。
🔍 如何列出系统中所有的 FileStore?
你可以使用 FileSystems.getDefault().getFileStores() 获取所有存储设备的信息,并打印它们的名称和类型。
✅ 示例代码:
import java.nio.file.*;
import java.nio.file.FileStore;
import java.io.IOException;
public class FileStoreDemo {
public static void main(String[] args) throws IOException {
FileSystem fileSystem = FileSystems.getDefault();
for (FileStore store : fileSystem.getFileStores()) {
System.out.println(store.name() + " - " + store.type());
}
}
}
🖥 示例输出(Windows):
Windows - NTFS
Data - NTFS
Video - NTFS
Transfer - FAT32
📌 store.name() 返回设备名,store.type() 返回文件系统类型(如 NTFS、FAT32、ext4 等)。
📁 获取系统中所有根目录(如 C:\、D:\、/)
你还可以遍历当前系统的根目录列表,检查每个目录是否可以访问。例如:
✅ 示例代码(检测是否可读取):
for (Path root : FileSystems.getDefault().getRootDirectories()) {
boolean isReadable = Files.isReadable(root);
System.out.println("directory = " + root + " - " + isReadable);
}
🖥 示例输出(Windows):
directory = C:\ - true
directory = D:\ - true
directory = E:\ - true
directory = F:\ - false
directory = G:\ - false
💡 某些盘符(如 F:\、G:\)可能存在,但并没有插入对应的设备(比如移动硬盘或U盘),因此不可读。
📌 应用场景举例
| 场景 | 使用方式 |
|---|---|
| 获取所有文件系统类型 | 遍历 getFileStores() |
| 检测某个盘符是否可用 | 使用 Files.isReadable() |
| 获取挂载点信息(如 UNIX 的挂载路径) | 结合 store.name() 和文件路径 |
| 检测剩余容量或总容量 | 使用 FileStore.getUsableSpace()、getTotalSpace() |
🛠 补充:获取存储空间信息
你可以获取每个存储设备的可用空间、总空间等:
for (FileStore store : FileSystems.getDefault().getFileStores()) {
System.out.println("Drive: " + store.name());
System.out.println("Type: " + store.type());
System.out.println("Total space: " + store.getTotalSpace());
System.out.println("Usable space: " + store.getUsableSpace());
System.out.println("------------");
}
✅ 总结
FileStore是文件系统中的存储卷或挂载点。- 使用
getFileStores()可列出所有存储设备。 Files.isReadable()可以检测某个目录是否可以访问(设备是否挂载)。- 可进一步获取存储空间大小、类型等信息。
- 在写底层文件监控、磁盘检查工具或跨平台文件操作工具时,
FileStore非常有用。