用Java得到硬盘空间

发表于:2007-06-11来源:作者:点击数: 标签:
用Java得到硬盘空间,有3种方法: 1、 调用system的command,然后分析得到的结果,这种方法有很强的系统依赖性, Linux 下和win下要分别写程序。下面是一个win下的例子,编译成功之后,运行 java Diskspace yourdir(比如c:) import java.io.BufferedReader;

用Java得到硬盘空间,有3种方法:

1、 调用system的command,然后分析得到的结果,这种方法有很强的系统依赖性,Linux下和win下要分别写程序。下面是一个win下的例子,编译成功之后,运行java Diskspace yourdir(比如c:)

import java.io.BufferedReader; 
import java.io.InputStreamReader; 

/** 
* Determine free disk space for a given directory by 
* parsing the output of the dir command. 
* This class is inspired by the code at 
* Works only under Windows under certain circumstances. 
* Yes, it´s that shaky. 
* Requires Java 1.4 or higher. 
* @[EMAIL PROTECTED] 
*Marco Schmidt 
*/ 
public class Diskspace 
{ 
private Diskspace() 
{ 
// prevent instantiation of this class 
} 

/** 
* Return available free disk space for a directory. 
* @[EMAIL PROTECTED] 
dirName name of the directory 
* @[EMAIL PROTECTED] 
free disk space in bytes or -1 if unknown 
*/ 
public static long getFreeDiskSpace(String dirName) 
{ 
try 
{ 
// guess correct ´dir´ command by looking at the 
// operating system name 
String os = System.getProperty("os.name"); 
String command; 
if (os.equals("Windows NT") || 
os.equals("Windows 2000")) 
{ 
command = "cmd.exe /c dir " + dirName; 
} 
else 
{ 
command = "command.com /c dir " + dirName; 
} 
// run the dir command on the argument directory name 
Runtime runtime = Runtime.getRuntime(); 
Process process = null; 
process = runtime.exec(command); 
if (process == null) 
{ 
return -1; 
} 
// read the output of the dir command 
// only the last line is of interest 
BufferedReader in = new BufferedReader( 
new InputStreamReader(process.getInputStream())); 
String line; 
String freeSpace = null; 
while ((line = in.readLine()) != null) 
{ 
freeSpace = line; 
} 
if (freeSpace == null) 
{ 
return -1; 
} 
process.destroy(); 
// remove dots & commas & leading and trailing whitespace 
freeSpace = freeSpace.trim(); 
freeSpace = freeSpace.replaceAll("\.", ""); 
freeSpace = freeSpace.replaceAll(",", ""); 
String[] items = freeSpace.split(" "); 
// the first valid numeric value in items after(!) index 0 
// is probably the free disk space 
int index = 1; 
while (index < items.length) 
{ 
try 
{ 
long bytes = Long.parseLong(items[index++]); 
return bytes; 
} 
catch (NumberFormatException nfe) 
{ 
} 
} 
return -1; 
} 
catch (Exception exception) 
{ 
return -1; 
} 
} 

/** 
* Command line program to print the free diskspace to stdout 
* for all 26 potential root directories A: to Z: 
* (when no parameters are given to this program) 
* or for those directories (drives) specified as parameters. 
* @[EMAIL PROTECTED] 
args program parameters 
*/ 
public static void main(String[] args) 
{ 
if (args.length == 0) 
{ 
for (char c = ´A´; c <= ´Z´; C++) 
{ 
String dirName = c + ":\"; 
System.out.println(dirName + " " + 
getFreeDiskSpace(dirName)); 
} 
} 
else 
{ 
for (int i = 0; i < args.length; i++) 
{ 
System.out.println(args[i] + " " + 
getFreeDiskSpace(args[i])); 
} 
} 
} 
} 

2、使用Jconfig,可以跨平台

从http://www.tolstoy.com/samizdat/jconfig.html上下载jconfig

下载的包的sample里有很简单的例子,如果是要得到磁盘空间的话:

用FileReGIStry.getVolumes()得到DiskVolume

然后call getFreeSpace()和getMaxCapacity()

就是这么简单:)

3、jni

这个是解决所有和os相关的操作的万能利器了。

例子写一个dll然后call之即可。

(责任编辑 火凤凰 sunsj@51cto.com  TEL:(010)68476636-8007)



原文转自:http://www.ltesting.net

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
...