在Linux上,Java程序如何列出所有分区并获得它们的可用空间?

在Linux上,Java程序如何列出所有分区并获得它们的可用空间?,java,linux,file,Java,Linux,File,我想要分区的名称,以及它们的总空间、已用空间和使用java程序的Linux系统的可用空间 在Windows系统中,我得到的值是正确的,但在Linux中,我只得到一个驱动器信息: 以下是我到目前为止所做的尝试 public class DiskSpace { public static void main(String[] args) { FileSystemView fsv = FileSystemView.getFileSystemView(); File[] drives

我想要分区的名称,以及它们的总空间、已用空间和使用java程序的Linux系统的可用空间

在Windows系统中,我得到的值是正确的,但在Linux中,我只得到一个驱动器信息:

以下是我到目前为止所做的尝试

public class DiskSpace {

public static void main(String[] args) {
    FileSystemView fsv = FileSystemView.getFileSystemView();
    File[] drives = File.listRoots();
    if (drives != null && drives.length > 0) {
        for (File aDrive : drives) {
            System.out.println("Drive Letter: " + aDrive);
            System.out.println("\tType: " + fsv.getSystemTypeDescription(aDrive));
            System.out.println("\tTotal space: " + aDrive.getTotalSpace());
            System.out.println("\tFree space: " + aDrive.getFreeSpace());
            System.out.println();
        }
    }
}

Linux上没有驱动器号。如果您想知道有哪些分区以及它们安装在哪里,请阅读
/proc/mounts
。当您有一个挂载点(在/proc/mounts中的第二列)时,使用
新文件(挂载点).getTotalSpace()
获取总空间。

Linux、Unix和类似Unix的系统有一个具有一个根的文件系统,其中可能有多个挂载点,其中包含部分或完整Unix文件系统的分区,可能被挂载——非Unix文件系统也可能使用适当的可用软件挂载,以处理必要的转换,但统一的单根文件系统模型仍然存在

如果您使用的
FileSystemView
类来自软件包,请不要期望太多:

FileSystemView是JFileChooser通往文件系统的网关。由于JDK1.1文件API不允许访问根分区、文件类型信息或隐藏的文件位等信息,因此此类旨在尽可能多地插入特定于操作系统的文件系统信息

Java许可证持有人可能希望提供不同的FileSystemView实现,以便更好地处理给定的操作系统

第二段是关键


Java的虚拟机实现旨在抽象出您在本例中需要的特定于平台的东西。要获得成功,您需要为您将支持的每个平台的本机系统API编写或查找本机调用包装器类。“高级”抽象(如
FileSystemView
类)在提供所需信息方面不太可能是完整或可靠的。

这是一个代码片段,仅显示名称装入的外部媒体

String OS = System.getProperty("os.name");
if(OS.equals("Linux"))
{
    String s = "";
    Runtime rt = Runtime.getRuntime();
    int n=0;
    Process ps = rt.exec("ls /run/media/Rancho");// Write your UserName, mine is Rancho

    InputStream in = ps.getInputStream();
    while((n = in.read())!=-1)
    {
        char ch = (char) n;
        s+ = ch;
    }
    System.out.println(s);  
}

Linux没有驱动器。是的。所以在Linux上,你的问题没有任何意义。在终端中运行命令
df
mount
,以了解您装载的文件系统。当您说“只有一个驱动器信息”时是什么意思?我的意思是它显示根文件信息。从语法上讲,如何获取所有文件information@Basile:如果他想编写一个“通用”java程序,那么读取
/proc/mounts
将比从java调用
df
mount
容易得多-似乎他的程序是为了“替换”df。当然,如果他想在任何其他类型的unix ish系统上使用他的程序,他将在
/proc/mounts
方面遇到麻烦。我同意你的看法。我建议在终端中运行
df
mount
,这是OP首先要了解的。然后,如果他真的需要编程信息,他可以使用
/proc/mounts
,但他可能需要避免特殊情况,如
/proc
systemd
binfmt\u misc
udev
devpts
fusectl
pstore
伪文件系统。所以这可能比你的提议更难。同意。有时候,一个好的版本的“获取线索”是最好的答案;)