因为论坛有人问到这个问题,所以就写了这篇文章.希望对大家有所帮助. 一般来讲,要用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])); }
}
}
}
方法二:使用Jconfig,可以跨平台 从http:
//
www.tolstoy.com/samizdat/jconfig.html上下载jconfig.
下载的包的sample里有很简单的例子,如果是要得到磁盘空间的话: 用FileRegistry.getVolumes()得到DiskVolume 然后call getFreeSpace()和getMaxCapacity() 就是这么简单..:)
方法三:jni 这个是解决所有和os相关的操作的万能利器了. 例子我也懒得写了. 写一个dll然后call之即可.
|
|
|
导航
统计
- 随笔: 115
- 文章: 1
- 评论: 86
- 引用: 0
常用链接
留言簿(5)
随笔档案(115)
网址
搜索
积分与排名
最新评论
阅读排行榜
评论排行榜
|
|