首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 獲取硬盤剩餘空間三種方案對比:命令列解析、JConfig 跨平台庫與 JNI 本地調用

     編輯:Java 相關知識

方案一:解析系統命令輸出(強平台相依)

Windows 下執行 dir 並解析最後一行可用空間。範例程式 Diskspace.java:

public class Diskspace {
    public static long getFreeDiskSpace(String dirName) {
        String os = System.getProperty("os.name");
        String cmd = (os.equals("Windows NT") || os.equals("Windows 2000"))
                ? "cmd.exe /c dir " + dirName
                : "command.com /c dir " + dirName;
        Process p = Runtime.getRuntime().exec(cmd);
        BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line, last = null;
        while ((line = in.readLine()) != null) last = line;
        p.destroy();
        if (last == null) return -1;
        last = last.trim().replaceAll("[.,]", "");
        String[] items = last.split(" ");
        for (int i = 1; i < items.length; i++) {
            try { return Long.parseLong(items[i]); } catch (NumberFormatException ignored) {}
        }
        return -1;
    }
    public static void main(String[] args) {
        if (args.length == 0) {
            for (char c = 'A'; c <= 'Z'; c++) System.out.println(c + ":\\ " + getFreeDiskSpace(c + ":\\"));
        } else for (String d : args) System.out.println(d + " " + getFreeDiskSpace(d));
    }
}

缺點:Linux/Unix 需另寫 df -k 解析邏輯,維護成本高。

方案二:JConfig 跨平台庫(推薦輕量跨平台)

  1. 下載:JConfig
  2. 使用 FileRegistry.getVolumes() 取得 DiskVolume 陣列。
  3. 呼叫 getFreeSpace() 與 getMaxCapacity() 即得可用/總容量。

優點:純 Java、跨平台、API 簡潔。

方案三:JNI 本地調用(終極靈活、開發成本最高)

  • 編寫 C/C++ DLL/so 呼叫 OS API (如 Windows GetDiskFreeSpaceEx、Linux statvfs)。
  • Java 端 System.loadLibrary 載入,native 方法映射。
  • 適用於需極致效能、存取特殊檔案系統屬性、或現有 C 庫復用場景。

選型建議

場景推薦方案
僅 Windows、快速原型方案一 (命令列解析)
跨平台生產環境、標準需求方案二 (JConfig)
特殊檔案系統、極致效能、既有 C 庫方案三 (JNI)

JDK 6+ 已內建 File.getFreeSpace()/getTotalSpace()/getUsableSpace(),現代專案優先使用標準 API,無需第三方庫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved