因為論壇有人問到這個問題,所以就寫了這篇文章.希望對大家有所幫助.
一般來講,要用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之即可.