方法一: 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包括三个基本步骤 假设这个支持文件在你的应用目录下,你必须这样调用FileRegistry.initialize() 方法 注意:应用目录的权限必须是可写的。JConfig将创建一个临时文件在这个目录下面,直到程序不再需要时它会被自动删除掉。未来的版本可创建一个配置文件在应用目录下面 如果这些支持文件能被发现,并且你的应用运行在一个支持的虚拟机上,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 扩展工具,可以透明的调用系统底层命令,获取更多的如磁盘容量,剩余空间大小等系统信息信息。 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(); } } } |