我使用此代码检查Linux中的可用空间:
public final class EnvironmentCheck
{
public EnvironmentCheck()
{
// If the HDD Free Space is less than 200 Megabytes write message HDD is too low
if (200 > checkHDDFreeSpace())
{
System.out.println("*** WARNING Hard Drive free space " + checkHDDFreeSpace() + " Megabytes " + "is too low! ***");
}
// If the RAM Free Space is less than 200 Megabytes write message HDD is too low
if (200 > checkRAMFreeSpace())
{
System.out.println("*** WARNING RAM free space " + checkRAMFreeSpace() + " Megabytes " + "is too low! ***");
}
}
public long checkHDDFreeSpace()
{
long availableSpace = 0;
FileSystem fs = FileSystems.getDefault();
for (FileStore store : fs.getFileStores())
{
try
{
availableSpace = store.getUsableSpace() / 1024;
//System.out.println(availableSpace);
}
catch (IOException e)
{
}
}
return availableSpace;
}
public long checkRAMFreeSpace()
{
return Runtime.getRuntime().freeMemory();
}
}
出于某种原因,当我在Linux上运行代码时,我总是得到消息。
*** WARNING Hard Drive free space <some value> Megabytes is too low! **
你能帮我解决我的错误。
我在Windows上看不到这条消息。
答案 0 :(得分:1)
在您的代码中无效的3件事:
1)FileStore.getUsableSpace()
返回一些字节。如果你想要MB,你需要除以1024 * 1024而不是1024:
availableSpace = store.getUsableSpace() / (1024*1024);
2)Runtime.freeMemory()
返回当前大小的的未使用字节数。堆动态增长或收缩,可能未达到最大大小。如果您需要的是可以分配的字节数,则需要以下内容:
Runtime rt = Runtime.getRuntime();
return rt.maxMemory() - (rt.totalMemory() - rt.freeMemory());
3)与1)相同,如果你想要MB,你需要除以1024 * 1024:
Runtime rt = Runtime.getRuntime();
long freeMem = rt.maxMemory() - (rt.totalMemory() - rt.freeMemory());
return freeMem / (1024 * 1024);
答案 1 :(得分:0)
错字?你的条件是否相同。此外,在Windows中,条件可能是条件评估为“200> 1”或某个数字等于或小于200.这将导致您从未在Windows中看到该消息。只是猜测,但你必须调试。首先改变条件。
答案 2 :(得分:0)
看看你的逻辑:
for (FileStore store : fs.getFileStores())
availableSpace = store.getUsableSpace() / 1024;
}
return availableSpace;
您可以在每次迭代时获得可用空间,但是您可以覆盖上一次迭代中的空间。所以你得到了你正在迭代的最后文件系统的空间,这可能只有不到200meg的空间。
输入一些调试输出,例如在迭代中打印出availableSpace
,肯定有助于解决这个问题。