2014-01-11 13 views
0

我希望使用java程序爲Linux系統提供總空間,已用空間和可用空間的分區名稱。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(); 
     } 
    } 
} 
+3

Linux沒有驅動器。它有[裝載](http://en.wikipedia.org/wiki/Mount_%28computing%29)[文件系統](http://en.wikipedia.org/wiki/File_system)。所以在Linux上你的問題沒有任何意義。在終端中運行'df'和'mount'命令來了解您的掛載文件系統。 –

+0

當你說「只有一個驅動信息」時,你是什麼意思? – Behe

+0

我的意思是它顯示根文件信息。在語法上我怎樣才能得到所有文件信息 – SUDARSHAN

回答

4

Linux上沒有驅動器盤符。如果您想知道哪些分區以及它們的安裝位置,請閱讀/proc/mounts。當你有一個安裝點(/ proc/mounts中的第二列)時,使用new File(mountpoint).getTotalSpace()來獲得總空間。

+0

或者只是在終端中運行'df'和'mount'命令 –

+0

@Basile:如果他想寫一個'generic'java程序,閱讀'/ proc/mounts'會很多比從java調用'df'或'mount'容易 - 似乎他的程序是用來'替換'df的。當然,如果他想在任何其他類型的unix-ish系統上使用他的程序,他會遇到'/ proc/mounts'的麻煩。 –

+0

我同意你的意見。我在終端上運行'df'和'mount'的建議首先讓OP瞭解一些事情。然後,如果他真的需要編程的信息,他可以使用'/ proc/mounts',但他可能需要避免像/ proc,systemd,binfmt_misc,udev,devpts, fusectl'和'pstore'僞文件系統。所以它可能比你提出的要難。 –

2

Linux,Unix和類似Unix的系統有一個文件系統,其中一個根目錄可以有多個掛載點,其中可以掛載包含Unix文件系統的部分或完整分區 - 非Unix文件系統也可以是安裝了適當的軟件來處理必要的轉換,但統一的單根文件系統模型仍然存在。

如果您使用的是FileSystemView類是從javax.swing.filechooser包,不要抱太大的期望:

的FileSystemView是JFileChooser的門戶文件系統。由於JDK1.1 File API不允許訪問諸如根分區,文件類型信息或隱藏文件位等信息,因此該類旨在儘可能多地使用特定於操作系統的文件系統信息。

Java許可證持有者可能希望提供不同的FileSystemView實現來更好地處理給定的操作系統。

第二段是關鍵。

Java的虛擬機實現旨在抽象出在這種情況下所需的特定平臺的特定類型的東西。要成功,您需要爲您將支持的每個平臺的本地系統API編寫或查找本機調用包裝類。提供您需要的信息時,像「FileSystemView」這樣的「高級」抽象概念不太可能完整或可靠。

0

這是一個代碼片段,僅顯示掛載的外​​部媒體名稱。

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); 
} 
相關問題