首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用java获取文件夹的挂载点

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

Stack Overflow用户
提问于 2019-06-22 13:42:34
回答 1查看 1.3K关注 0票数 3

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

代码语言:javascript
复制
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));
    }

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

EN

回答 1

Stack Overflow用户

发布于 2020-10-02 18:04:01

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

代码语言:javascript
复制
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;
}

它假设父目录的文件存储将在检查文件存储高于已安装文件系统的级别时更改。这可以在Windows10和WSL Ubuntu JDK15上运行--其他版本不确定。

代码语言:javascript
复制
Path p = Path.of("/mnt/c/dev/tools");
Path m = mountOf(p);
System.out.println("Mount point of "+p+" => "+m);

打印:

代码语言:javascript
复制
Mount point of /mnt/c/dev/tools => /mnt/c

然后,要计算出每个文件系统挂载一次的空闲空间,您只需要为从mountOf(p)返回的每个唯一路径调用printDiskData(m.toFile())

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56712909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档