1. 程式人生 > >java 得到磁碟的可用空間

java 得到磁碟的可用空間

import java.util.*;
import java.io.*;

public class DiskUtil {

  public static long getFreeSpace(String path) throws Exception {
    return getFreeSpace(path, "GBK");
  }

  public static long getFreeSpace(String path, String charset) throws Exception {
    if (System.getProperty("os.name").startsWith("Windows")) {
      return getFreeSpaceOnWindows(path, charset);
    }
    if (System.getProperty("os.name").startsWith("Linux")) {
      return getFreeSpaceOnLinux(path);
    }

    throw new UnsupportedOperationException(
        "The method getFreeSpace(String path) has not been implemented for this operating system.");
  }

  private static long getFreeSpaceOnWindows(String path, String charset) throws Exception {
    long bytesFree = -1;

    File script = new File(System.getProperty("java.io.tmpdir"), "script.bat");
    PrintWriter writer = new PrintWriter(new FileWriter(script, false));
    writer.println("dir /"" + path + "/"");
    writer.close();

    // get the output from running the .bat file
    Process p = Runtime.getRuntime().exec(script.getAbsolutePath());
    InputStream reader = new BufferedInputStream(p.getInputStream());
    StringBuffer buffer = new StringBuffer();
    for (;;) {
      int c = reader.read();
      if (c == -1)
        break;
      buffer.append((char) c);
    }
    String outputText = buffer.toString();
    reader.close();

    outputText = new String(outputText.getBytes("ISO-8859-1"), charset);

    // parse the output text for the bytes free info
    StringTokenizer tokenizer = new StringTokenizer(outputText, "/n");
    while (tokenizer.hasMoreTokens()) {
      String line = tokenizer.nextToken().trim();
      // see if line contains the bytes free information
      if (line.endsWith("bytes free")) {
        tokenizer = new StringTokenizer(line, " ");
        tokenizer.nextToken();
        tokenizer.nextToken();
        bytesFree = Long.parseLong(tokenizer.nextToken().replaceAll(",", ""));
      } else if (line.endsWith("可用位元組")) {
        String[] parts = line.split(" ");
        bytesFree = Long.parseLong(parts[2].replaceAll(",", ""));
      }
    }
    return bytesFree;
  }

  private static long getFreeSpaceOnLinux(String path) throws Exception {
    long bytesFree = -1;

    Process p = Runtime.getRuntime().exec("df " + "/" + path);
    InputStream reader = new BufferedInputStream(p.getInputStream());
    StringBuffer buffer = new StringBuffer();
    for (;;) {
      int c = reader.read();
      if (c == -1)
        break;
      buffer.append((char) c);
    }
    String outputText = buffer.toString();
    reader.close();

    // parse the output text for the bytes free info
    StringTokenizer tokenizer = new StringTokenizer(outputText, "/n");
    tokenizer.nextToken();
    if (tokenizer.hasMoreTokens()) {
      String line2 = tokenizer.nextToken();
      StringTokenizer tokenizer2 = new StringTokenizer(line2, " ");
      if (tokenizer2.countTokens() >= 4) {
        tokenizer2.nextToken();
        tokenizer2.nextToken();
        tokenizer2.nextToken();
        bytesFree = Long.parseLong(tokenizer2.nextToken());
        return bytesFree;
      }

      return bytesFree;
    }

    throw new Exception("Can not read the free space of " + path + " path");
  }

  public static void main(String args[]) {
    try {
      System.out.println("Free space of /: " + getFreeSpace(""));
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }
}
 

相關推薦

磁碟可用空間和佔用空間對不上的問題

新公司的測試機磁碟空間空餘很小,日誌很多,也很大,做個日誌壓縮指令碼,在夜裡4:30自動執行,第二天後發現磁碟空間又滿了,只好刪除沒用的日誌,清空空間,可詭異的是怎麼刪除沒用的檔案,空間還是佔用很大。如圖 用du 根目錄下,發現這些檔案加一塊也達不到佔用的空間大小。如圖 我也有遇見過此類問題,一般

刪除檔案後,磁碟可用空間並沒有釋放怎麼辦?

我們部分伺服器的根檔案系統只預留了50G空間,並且常用於除錯的/var目錄並未 掛載到單獨的磁碟上而是共享這50G。那麼 過多的列印資訊或crash就會造成根目 錄可用空間不夠。但是刪除大檔案後,磁碟可用空間可能不會增大。 下面以刪除存放系統log資訊的message為例:

java 得到磁碟可用空間

import java.util.*; import java.io.*; public class DiskUtil {   public static long getFreeSpace(String path) throws Exception {     return getFreeSpace(pat

磁碟中壓縮出可用空間

當你的磁碟為主分割槽時,如果你壓縮卷,最後分出來的是“未分配”分割槽(上邊有黑色條框),而如果你想要壓縮出“可用空間”分割槽作為安裝其它系統,比如windows+ubuntu雙系統或者其它用途的空閒狀態時,需要的是“可用空間”分割槽(上邊有綠色條框); 右擊你所需要壓縮

JAVA獲取磁碟空間

需要把磁碟空間顯示在頁面上,這樣就不用去伺服器查看了,方便 兩個辦法 File file = new File("D:"); long totalSpace = file.getTotalSpace(); long freeSpace = file.getFreeS

java 程式中取得指定磁碟空間

java.io.File; File file = new File("c:"); //取得C:\ 的總total空間 file.getTotalSpace(); //取得剩餘空間 file.getFreeSpace(); //取得已使用的空間 file.getUsableSpace

java獲取磁碟空間大小

public class SpaceCheck {       public static void main(String[] args) {           File[] roots = File.listRoots();           for (File _file : roots) {  

window磁碟管理下面的“未分配”與“可用空間

原來裝的Ubuntu的分割槽給刪除之後,變為“未分配”,不能重新安裝系統了 所以後來從HDD中分出來50個G來重新安裝 “未分配”的分割槽(在SSD裡)可以從之前割分割槽的那個碟符下“擴展卷”來進行恢復,不過如果在“壓縮卷”的話,出來的仍是“未分配”,不會再變成“可用空間了

C# 獲取磁碟空間或者可用空間

/// <summary>         /// 獲取指定驅動器的空間總大小(單位為G)         /// 只需輸入代表驅動器的字母即可         /// </summary>         /// <param name="D

Sql Server查詢磁碟可用空間,資料庫資料檔案及日誌檔案的大小及利用率

在MS Sql Server中可以能過以下的方法查詢出磁碟空間的使用情況及各資料庫資料檔案及日誌檔案的大小及使用利用率:1、查詢各個磁碟分割槽的剩餘空間:        Exec master.dbo.xp_fixeddrives   2、查詢資料庫的資料檔案及日誌檔案的相關資訊(包括檔案組、當前檔案大小、檔

E盤可用空間0字節,要怎樣找到文件

數據找回文件恢復RAW位置不可用可用空間0字節說明這個盤的文件系統結構損壞了。在平時如果數據不重要,那麽可以直接格式化就能用了。但是有的時候裏面的數據很重要,那麽就必須先恢復出數據再格式化。具體恢復方法可以看正文了解(不格式化的恢復方法) 工具/軟件:星空數據恢復軟件 步驟1:先下載並解壓軟件打開後,直接雙擊

移動磁盤可用空間0字節數據怎麽尋回

EDA DG 怎麽 dac 3D ces TP mage mar 可用空間0字節說明這個盤的文件系統結構損壞了。在平時如果數據不重要,那麽可以直接格式化就能用了。但是有的時候裏面的數據很重要,那麽就必須先恢復出數據再格式化。具體恢復方法可以看正文了解(不格式化的恢復方法)

C# 根據磁碟碟符獲取磁碟儲存空間

本章講述:根據磁碟碟符獲取磁碟總的儲存容量和可用儲存容量; /// 獲取指定驅動器的空間總大小(單位為B) /// </summary> /// <param name="str_HardDiskName">只需輸入代表驅動器的字母即可 </param>

_037_Android_Android 儲存到SD卡,獲取SD的大小及可用空間

 使用Sdcard注意事項:     1.許可權問題:             <uses-permission andro

Windows10系統C盤檔案實際大小佔用空間可用空間不一致(相差差8到20G)

WIN10系統C盤佔用和檔案實際大小不一致。【差20G找不到】  綜合討論區  >  一般性問題討論區 問題 0 登入進行投票 新買的電腦,預裝WIN10家庭版64位。 剛剛開機,進行了一次重置。 C盤右鍵屬性顯示“已佔用54.

基於JAVA磁碟排程演算法

在作業系統課上的一點小感想,基於JAVA的磁碟排程演算法,分享出來和大家一起學習。 先來先服務(FCFS)演算法。即先來的請求先被響應。FCFS策略為我們建立起一個隨機訪問機制的模型,但是假如用這個策略反覆響應從裡到外的請求,那麼將會消耗大量的時間。FCFS也被看作是最簡單的磁碟排程演算法。 最短

C盤可用空間為0導致MySQL損壞的修復方法

問題描述:作業系統Windows Server2008 X64,資料庫MySQL5.5,因程式導致C盤可用空間為0,清理C盤後發現MySQL資料庫崩潰,無法連線使用,需要解決如下兩個問題 https://www.cnblogs.com/ADTL/p/10041796.html 1、保住歷史資料 2、修復

CDH角色的日誌目錄的可用空間不足

CDH主介面發現好多角色都存在隱患 點hdfs的隱患 發現就是log和臨時目錄空間不足所引起的。 此角色的日誌目錄所在的檔案系統的可用空間小於10.0吉位元組。 /var/log/hadoop-httpfs /dfs /tmp/xxx 到某臺節點檢視,d

磁碟劃分空間提示磁碟上沒有足夠的空間完成此操作,使用傲梅分割槽助手解決

下載地址:https://www.disktool.cn/ 自己遊戲放在D盤,突然發現這一次屁股更新要6G。。磁碟大小不夠了,但是自己C盤還是有空間的,我想著挪一點過來,發現用windows自帶的不生效,明明有空間,但是提示 發現了這款分割槽助手軟體,親測可以使用! 操作步驟

Java 模擬磁碟排程管理

老師佈置的實習題目如下:設計目的:加深對請求磁碟排程管理實現原理的理解,掌握磁碟排程演算法。設計內容:通過程式設計實現不同磁碟排程演算法。設定開始磁軌號尋道範圍,依據起始掃描磁軌號和最大磁軌號數,隨機產生要進行尋道的磁軌號序列。選擇磁碟排程演算法,顯示該演算法的磁軌訪問順序,