gpt4 book ai didi

java - 使用java获取文件夹的挂载点

转载 作者:行者123 更新时间:2023-12-04 14:19:19 25 4
gpt4 key购买 nike

在 Ubuntu 系统上,我正在搜索 /media目录并假设每个文件夹都是一个已挂载的文件系统以获取其大小和信息:

String username = System.getProperty("user.name");
File media = new File("/media/" + username);
System.out.println("Partition: " + media.getAbsolutePath());

File[] fileList = media.listFiles();

if (fileList != null)
for (File f : fileList) {
if (f.isDirectory())
printDiskData(f);
}


void printDiskData(File partitionMountPoint) {
System.out.println(partitionMountPoint.getAbsolutePath());
System.out.println(String.format("Total disk size: %.2f GB", partitionMountPoint.getTotalSpace() / 1073741824f));
System.out.println(String.format("Free disk size: %.2f GB", partitionMountPoint.getFreeSpace() / 1073741824f));
System.out.println(String.format("Usabale disk size: %.2f GB", partitionMountPoint.getUsableSpace() / 1073741824f));
}

这些文件夹中的一些可能没有指向已安装的驱动器,而只是常规文件夹。所以我需要检测这些文件是否是同一个 / 上的常规文件夹(root)分区与否,如果没有,则获取它们的大小,可用空间,...

最佳答案

这是一种无需尝试调用 Linux 文件或脚本即可确定 Java 中目录路径的顶级挂载点的方法。

public static Path mountOf(Path p) throws IOException {
FileStore fs = Files.getFileStore(p);
Path temp = p.toAbsolutePath();
Path mountp = temp;

while( (temp = temp.getParent()) != null && fs.equals(Files.getFileStore(temp)) ) {
mountp = temp;
}
return mountp;
}
它假设一旦检查已安装文件系统级别以上的文件存储,父目录的文件存储就会改变。这适用于 Windows 10 和 WSL Ubuntu JDK15 - 不确定其他版本。
Path p = Path.of("/mnt/c/dev/tools");
Path m = mountOf(p);
System.out.println("Mount point of "+p+" => "+m);
打印:
Mount point of /mnt/c/dev/tools => /mnt/c
然后要为每个文件系统挂载计算一次可用空间,您只需要调用 printDiskData(m.toFile())对于从 mountOf(p) 返回的每个唯一路径.

关于java - 使用java获取文件夹的挂载点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56712909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com