java.io.File中有一個listRoots的靜態方法,該方法返回一個指向檔案系統根目錄的File[]。
並通過調用File中的getUsableSpace()和getTotalSpace()方法可以擷取該分區的可用空間大小以及空間的總大小。
測試方法如下:
| 代碼如下 |
複製代碼 |
import java.io.File; public class FileTest { private static final File[] rootDirArray = File.listRoots(); /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub for(File dir : rootDirArray) { System.out.println(dir.getPath()); long usableSpace = dir.getUsableSpace(); System.out.println("Usable space = " + usableSpace); System.out.println(usableSpace / 1024.0 / 1024.0 / 1024.0 + " G"); long totalSpace = dir.getTotalSpace(); System.out.println("Total space = " + totalSpace); System.out.println(totalSpace / 1024.0 / 1024.0 / 1024.0 + " G"); } } }
|
需要注意的是這兩個方法返回的數值為long長整形,單位為Byte,Windows系統中1M = 1024Byte.
而一般硬碟、隨身碟廠商使用的換算為1M = 1000Byte,這就是為啥買的8G的隨身碟插在電腦上顯示的空間會小於8G的原因。
..
計算目錄及檔案個數,大小。
| 代碼如下 |
複製代碼 |
import java.io.File; import java.text.DecimalFormat; import java.text.NumberFormat; public class GetFolderSize { int totalFolder = 0; int totalFile = 0; public static void main(String args[]) { String folder = "c:\java"; try { GetFolderSize size = new GetFolderSize(); long fileSizeByte = size.getFileSize(new File(folder)); System.out.println("Folder Size: " + fileSizeByte + " Bytes"); System.out.println("Total Number of Folders: "+ size.getTotalFolder()); System.out.println("Total Number of Files: " + size.getTotalFile()); } catch (Exception e) {} } public long getFileSize(File folder) { totalFolder++; System.out.println("Folder: " + folder.getName()); long foldersize = 0; File[] filelist = folder.listFiles(); for (int i = 0; i < filelist.length; i++) { if (filelist[i].isDirectory()) { foldersize += getFileSize(filelist[i]); } else { totalFile++; foldersize += filelist[i].length(); } } return foldersize; } public int getTotalFolder() { return totalFolder; } public int getTotalFile() { return totalFile; } } |