使用Java获取文件夹的挂载点

时间:2019-06-22 05:42:34

标签: java file filesystems

在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));
    }

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

1 个答案:

答案 0 :(得分:0)

这是一种无需尝试调用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)