JAVA 中怎样得到整个磁盘空间大小以及剩余空间大小

98wanglei 2006-08-22 04:14:18
JAVA 中怎样得到整个磁盘空间大小以及剩余空间大小
...全文
634 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
emin_lee 2006-08-23
  • 打赏
  • 举报
回复
mark!
zhaohe1979 2006-08-23
  • 打赏
  • 举报
回复
给你个我写的本地代码
#include <jni.h>
#include "com_travelsky_fgos_client_platform_utils_LocDiskMemVol.h"
#include <windows.h>

/*
* Class: com_travelsky_fgos_client_platform_utils_LocDiskMemVol
* Method: getDiskInfoByName
* Signature: (Ljava/lang/String;)[J
*/
JNIEXPORT jlongArray JNICALL Java_com_travelsky_fgos_client_platform_utils_LocDiskMemVol_getDiskInfoByName
(JNIEnv * env, jclass cls, jstring dn)
{
BOOL success;
const char * diskName;
unsigned long sectorsPerCluster, bytesPerSector, freeClusters, clusters;
diskName = env->GetStringUTFChars(dn, 0);
success = GetDiskFreeSpace(diskName, §orsPerCluster, &bytesPerSector, &freeClusters, &clusters);
env->ReleaseStringUTFChars(dn, diskName);
jlongArray jla = env->NewLongArray(4);
jlong jl1 = bytesPerSector;
jlong jl2 = sectorsPerCluster;
jlong jl3 = freeClusters;
jlong jl4 = clusters;
if(success)
{
env->SetLongArrayRegion(jla, 0, 1, &jl1);
env->SetLongArrayRegion(jla, 1, 1, &jl2);
env->SetLongArrayRegion(jla, 2, 1, &jl3);
env->SetLongArrayRegion(jla, 3, 1, &jl4);
}

return jla;
}

/*
* Class: com_travelsky_fgos_client_platform_utils_LocDiskMemVol
* Method: getMemInfo
* Signature: ()[J
*/
JNIEXPORT jlongArray JNICALL Java_com_travelsky_fgos_client_platform_utils_LocDiskMemVol_getMemInfo
(JNIEnv * env, jclass cls)
{
MEMORYSTATUS stat;
GlobalMemoryStatus (&stat);
long memtemp[2];
jlongArray jla = env->NewLongArray(4);
jlong jl1 = stat.dwTotalPhys;
jlong jl2 = stat.dwAvailPhys;
env->SetLongArrayRegion(jla, 0, 1, &jl1);
env->SetLongArrayRegion(jla, 1, 1, &jl2);
return jla;
}
bigc2000 2006-08-22
  • 打赏
  • 举报
回复
1.6都出来了?!

windows api 可以GetDiskFreeSpace()得到具体哪个盘符的可用空间。非windows就不知道了
反正jni肯定需要的
RobertHooke 2006-08-22
  • 打赏
  • 举报
回复
Sigar这个包不错,用用吧,什么信息都能得到
千里冰封820 2006-08-22
  • 打赏
  • 举报
回复
用的是1.4的话,就不可能从SUN的API里面得到了
你只要用C/C++写一个DLL文件供JAVA调用
但是,这样的话,就失去了JAVA跨平台的特性了
zhmt 2006-08-22
  • 打赏
  • 举报
回复
jf
98wanglei 2006-08-22
  • 打赏
  • 举报
回复
谢谢楼上的
用的JDK1.4
用jni具体怎么本地调用
是磁盘空间 不是内存空间
千里冰封820 2006-08-22
  • 打赏
  • 举报
回复
如果你用的是JDK1.6的话,那就很容易了
File.getFreeSpace()
getUsableSpace()等很多方法可以让你用的

如果你用的是1.5或者以下的话,就只有依靠JNI本地调用来得到空间了
一般用Runtime只能得到JVM的空间大小
freeMemory()
返回 Java 虚拟机中的空闲内存量。
maxMemory()
返回 Java 虚拟机试图使用的最大内存量。
totalMemory()
返回 Java 虚拟机中的内存总量。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧