方法一: import java.io.BufferedReader; import java.io.File; import java.io.InputStreamReader; public class GetDiskSpaceInfo { public static void main(String[] args) { try { // File.listRoots()获取可用文件系统根目录。 // 可移动介质的插入和弹出,以及断开或卸载那些物理磁盘或虚拟磁盘都可以获取。 for (int c = 0; c < File.listRoots().length; c++) { String dirName = File.listRoots()[c].getPath(); long freeSpace = getFreeDiskSpace(dirName); if (freeSpace != -1) { long number = Math.round(freeSpace / (1024.00 * 1024.00)); System.out.println(dirName + " 剩余空间为: " + number + "MB"); } } } catch (Exception e) { e.printStackTrace(); } } private static long getFreeDiskSpace(String dirName) throws Exception { String osName = System.getProperty("os.name"); if (!(osName.equalsIgnoreCase("windows XP") || osName .equalsIgnoreCase("windows 2000"))) return -1; String command = "cmd exe /c dir " + dirName; // 操作系统命令 // System.out.println(command); //测试打印系统操作命令 Process process = Runtime.getRuntime().exec(command); // 执行操作系统命令。 if (process == null) return -1; BufferedReader br = new BufferedReader(new InputStreamReader( process.getInputStream())); String line = ""; String lastLine = ""; while ((line = br.readLine()) != null) { // 依次一行行读取,但while循环的目的只是得到最后一行字符。 // System.out.println(line); 打印根目录下的目录和文件 lastLine = line;// 最后一行才是磁盘的剩余空间 } lastLine = lastLine.replaceAll(",", ""); // 去掉如2,146,623,488中间的逗号。 String[] items = lastLine.split(" "); long freeSpace = -1; for (int i = (items.length - 1); i > 0; i--) { // 从最后一个字符串开始遍历。 try { freeSpace = Long.parseLong(items[i]); break; // 如果找到目的数据就跳出循环。 } catch (NumberFormatException nfe) { continue; // 跳过不是数字的字符。 } } return freeSpace; } } 结果 C:\ 剩余空间为: 15055MB 方法二:使用Jconfig,可以跨平台 下面转载一下JConfig的具体用法
JConfig是对核心java API的扩展library,它通过jni来调用各种平台下应用程序来取得核心java API无法直接获得的系统信息。它能帮助你创建一个高质量,可扩展的java应用 要使用JConfig,你必须确定JConfig能找到它运行时所需要的所有文件,并且你要适当的对JConfig进行初始化配置。如果你在安装时出现问题,请参考附带的例子和帮助文件来找到怎么初始化JConfig。附带的例子和程序在source/com/tolstoy/testjc这个目录下。 JConfig附带的文件: 使用JConfig包括三个基本步骤 假设这个支持文件在你的应用目录下,你必须这样调用FileRegistry.initialize() 方法 注意:应用目录的权限必须是可写的。JConfig将创建一个临时文件在这个目录下面,直到程序不再需要时它会被自动删除掉。未来的版本可创建一个配置文件在应用目录下面 如果目录传给FileRegistry.initialize() 不包括所有的支持文件的话,JConfig将使用内部存储的默认值.但是,不要使用这种行为:确定目录下包括了所有的支持文件。如果JConfig不能找到这些文件中的任意一个的话,将会在控制台打印出一个警告信息,来说明文件不能被找到。如果出现警告信息,请检查目录下面是否包含了这些文件。 在source/com/tolstoy/testjc目录下,Tester.java程序包含了‘doubleCheckJConfigInitializationDirectory()’方法,你可以使用它来确定'jconfig.cfg' and 'jcfactrz.txt'存放在那个目录下。 如果这些支持文件能被发现,并且你的应用运行在一个支持的虚拟机上,JConfig将找到合适的本地代码库正确的初始化JConfig 但是,如果不能找到合适的本地代码库,JConfig将只能提供一套有限制的功能。在这个情况下JConfig将输出一个信息:that FileRegistryPlain has been loaded 更多细节: 为了让JConfig能运行在full mode下,必须遵守下面的规则: 如果需要转载,请注明出处和作者。谢谢
其他资源:http://www.buildapp.net/java/show.asp?id=8479 在Windows下通过JConfig获取磁盘剩余空间信息JConfig是一个跨平台的JAVA 扩展工具,可以透明的调用系统底层命令,获取更多的如磁盘容量,剩余空间大小等系统信息信息。 JConfig的下载地址为:http://www.simtel.net/product.download.mirrors.php?id=54577,解压后,将samizdat\common下的一系列.dll文件拷贝到%JAVA_HOME%\jre\bin目录下, JConfig通过系统名称、Java虚拟机类型、Java版本号等信息,决定加载哪个动态链接库,在程序的编译路径中引入:samizdat\common\JConfig.zip包,下面是我写的一个例子: import java.io.File; import com.jconfig.DiskObject; import com.jconfig.FileRegistry; import com.jconfig.Trace; public class Spacechecker { public static void main(String[] args) { //这个路径是包含jconfig.cfg和jcfactrzz.txt的文件夹的路径,我拷贝到了工程中 File file = new File("jconfig"); // 初始化文件系统 FileRegistry.initialize(file, 0); Trace.setDestination(Trace.TRACE_SYSOUT); // 创建磁盘对象,可以是磁盘驱动器、目录或文件 try { DiskObject diskObj = FileRegistry.createDiskObject( new File("F:\\"), 0); // 获得磁盘容量 long totalSpace = diskObj.getFile().getTotalSpace(); System.out.println(totalSpace / 1024 / 1024 / 1024 + "G"); // 获得磁盘可用空间 long freeSpace = diskObj.getFile().getFreeSpace(); System.out.println(freeSpace / 1024 / 1024 / 1024 + "G"); } catch (Exception e) { e.printStackTrace(); } } } |