我們在網(wǎng)上查找獲取磁盤大小的程序時,經(jīng)常會見到這樣的程序慨仿,windows是一套寫法(用java的api)灶体,linux是一套寫法(用的是模擬命令行運(yùn)行命令的方式獲取磁盤空間)其障。所以我們想當(dāng)然的以為鲫剿,windows的寫法在linux上行不通鳄逾。一般的寫法如下:
package com.example.demo.TypeTest;
import java.io.File;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
/**
*@Description: TODO
*@Author: xushu
*@Date: 2019-10-23 14:34
**/
public class Test {
/**
* 執(zhí)行系統(tǒng)命令
*
* @param cmd 命令
* @return 字符串結(jié)果
*/
private static String runCommand(String cmd) {
StringBuilder info = new StringBuilder();
try {
Process pos = Runtime.getRuntime().exec(cmd);
pos.waitFor();
InputStreamReader isr = new InputStreamReader(pos.getInputStream());
LineNumberReader lnr = new LineNumberReader(isr);
String line;
while ((line = lnr.readLine()) != null) {
info.append(line).append("\n");
}
} catch (Exception e) {
info = new StringBuilder(e.toString());
}
return info.toString();
}
/**
* 判斷系統(tǒng)是否為windows
*
* @return 是否
*/
private static boolean isWindows() {
return System.getProperties().getProperty("os.name").toUpperCase().contains("WINDOWS");
}
private static final String path = "D:/FileFromFtp";
/**
* 判斷是否需要刪除文件
*
* @return 磁盤使用率
*/
public static boolean getWinDiskStoresInfo() {
//系統(tǒng)為windows
if(isWindows()) {
String dirName = path.substring(0, path.indexOf("/") + 1);
File win = new File(dirName);
if (win.exists()) {
long total = win.getTotalSpace();
long usableSpace = win.getUsableSpace();
if((double)(total - usableSpace) / total > 0.8){
return true;
}
}
}else {
//系統(tǒng)為Unix
String ioCmdStr = "df -h /";
String resultInfo = runCommand(ioCmdStr);
String[] data = resultInfo.split(" +");
double total = Double.parseDouble(data[10].replace("%", ""));
if(total / 100 > 0.8){
return true;
}
}
return false;
}
public static void main(String[] args) throws NoSuchFieldException {
getWinDiskStoresInfo();
}
}
其實這樣好蛋疼,我也不知道這是什么瞎幾把寫法灵莲,好多人都不知道思考或者實驗一下雕凹,拿起代碼就是抄。Java在windows平臺上實現(xiàn)了一套文件系統(tǒng)政冻,為WinNTFileSystem枚抵,它支持獲取目標(biāo)卷的總?cè)萘亢褪S嗳萘俊D敲丛趌inux上明场,它同樣實現(xiàn)了一套文件系統(tǒng)汽摹,為UnixFileSystem,所以苦锨,不管什么平臺逼泣,只需要統(tǒng)一的寫法。所以寫法可以省略為:
package com.example.demo.TypeTest;
import java.io.File;
/**
*@Description: TODO
*@Author: xushu
*@Date: 2019-10-24 10:59
**/
public class BBB {
public static void main(String[] args) {
File win = new File("/");
if (win.exists()) {
long total = win.getTotalSpace();
long usableSpace = win.getUsableSpace();
System.out.println((double)(total - usableSpace) / total);
}
}
}