现在的位置: 首页 > 综合 > 正文

获取磁盘剩余空间

2014年11月05日 ⁄ 综合 ⁄ 共 4561字 ⁄ 字号 评论关闭

 

方法一:

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
D:\ 剩余空间为: 13843MB

方法二:使用Jconfig,可以跨平台
  从http://www.tolstoy.com/samizdat/jconfig.Html上下载jconfig.
  下载的包的sample里有很简单的例子,假如是要得到磁盘空间的话:
  用FileRegistry.getVolumes()得到DiskVolume
  然后call getFreeSpace()和getMaxCapacity()
  就是这么简单..:)
  
  方法三:jni
  这个是解决所有和os相关的操作的万能利器了.
  例子我也懒得写了.
  写一个dll然后call之即可.

下面转载一下JConfig的具体用法
 

JConfig是对核心java API的扩展library,它通过jni来调用各种平台下应用程序来取得核心java API无法直接获得的系统信息。它能帮助你创建一个高质量,可扩展的java应用

要使用JConfig,你必须确定JConfig能找到它运行时所需要的所有文件,并且你要适当的对JConfig进行初始化配置。如果你在安装时出现问题,请参考附带的例子和帮助文件来找到怎么初始化JConfig。附带的例子和程序在source/com/tolstoy/testjc这个目录下。

JConfig附带的文件:
1.JConfig.zip(适合所有平台)-包括适合所有平台的.class文件
2.jconfig.cfg,jcfactrz.txt,jcprops.txt(适合所有平台)-包括了配置信息,和一些支持文档
3.jcnfigSN.dll,jcnfigSW.sll,etc.(适用于windows平台)-windows DLLs
4.JConfig.shlb(适用于Mac平台)-Mac 公共的library
5.libjconfiglx0.so(适用于linux平台)Linux的公共library

使用JConfig包括三个基本步骤
1.确定jconfig。zip在classpath里。
2.确定jconfig能找到使用时的本地代码库
3.调用一个包括支持文件描述的本地目录文件对象的FileRegistry.initialize()方法

假设这个支持文件在你的应用目录下,你必须这样调用FileRegistry.initialize() 方法
curDir = new File( System.getProperty( "user.dir" ) );
FileRegistry.initialize( curDir, 0 );

注意:应用目录的权限必须是可写的。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有三种操作方式,这个要取决于它怎么初始化和在什么平台在运行
1.full mode: 所有的FileRegisty方法能想你期望的那样正常运行
2.fallbak mode:只有一部分FileRegisty方法能正常运行,多数会方法null或者-1
3.error mode:所有的FileRegisty方法都返回null或者-1

为了让JConfig能运行在full mode下,必须遵守下面的规则:
1.JConfig必须运行在一个被支持的平台下
2.JConfig必须被初始化,并且应用目录下包括了jconfig.cfg和jcfactrz.txt这两个文件。并且目录必须
是可写的。
3.如果要使用本地代码库,JConfig必须能找到它

如果JConfig已经被正确的初始化了,并且能找到所有需要的文件,它将已full mode运行在它所支持的平
台上,或者以fallback mode运行在一个不支持的平台上。(待续.....)

如果需要转载,请注明出处和作者。谢谢
QQ:221704
MSN:flyly@yeah.net
EMAIL:zhangfl@sports.cn

 

其他资源: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();   
        }   
    }   
}
【上篇】
【下篇】

抱歉!评论已关闭.