因为论坛有人问到这个问题,所以就写了这篇文章.希望对大家有所帮助.
一般来讲,要用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)
网址
搜索
积分与排名
最新评论

阅读排行榜
评论排行榜
|
|