在工作驱动器上获得空闲空间时获取IOException

时间:2013-05-01 09:30:29

标签: java memory-management

我正在开发一个应用程序,它首先需要在运行任何操作之前检查可用的可用磁盘空间。我们设置了一些默认的所需空间限制,如512MB,所以如果任何工作驱动器没有超过512mb的空间,我的程序将提示更少的可用内存空间,请留出足够的空间来运行程序。

我正在使用以下代码。

long freeSpace = FileSystemUtils.freeSpaceKb() * 1024; 

这里我首先将大小转换为字节,以与我们的标准所需大小进行比较。 由于以上陈述,我得到以下异常:

Error-Command line returned OS error code '3' for command [cmd.exe, /C, dir /-c "F:\MyApp\"]Stacktrace java.io.IOException: Command line returned OS error code '3' for command [cmd.exe, /C, dir /-c "F:\MyApp"]
at org.apache.commons.io.FileSystemUtils.performCommand(FileSystemUtils.java:506)
at org.apache.commons.io.FileSystemUtils.freeSpaceWindows(FileSystemUtils.java:303)
at org.apache.commons.io.FileSystemUtils.freeSpaceOS(FileSystemUtils.java:270)
at org.apache.commons.io.FileSystemUtils.freeSpaceKb(FileSystemUtils.java:206)
at org.apache.commons.io.FileSystemUtils.freeSpaceKb(FileSystemUtils.java:240)
at org.apache.commons.io.FileSystemUtils.freeSpaceKb(FileSystemUtils.java:222)...

操作系统返回的错误代码是'3',这意味着它不是正常终止。

那么现在我该如何解决这个问题呢?

我还发现了java 1.6中可用的替代方法 - How to find how much disk space is left using Java?

new File("c:\\").getFreeSpace();


---------------------------------
**More Details :** 
---------------------------------
OS Architecture : amd64
Temp Dir : c:\temp\
OS Name : Windows 7
OS Version : 6.1 amd64
Jre Version : 1.6.0_45-b06
User Home : C:\Users\Tej.Kiran
User Language : en
User Country: US
File Separator : \
Current Working Directory : F:\MyApp\

1 个答案:

答案 0 :(得分:0)

您可以尝试从提示中执行该命令。运行cmd.exe并输入以下内容:

cmd.exe /C dir /-c "F:\MyApp\"
echo %errorlevel%

错误代码3表示路径不存在,但在这种情况下,我想知道它是否与权限相关。任何非零错误级别都是一个问题。如果您的Java应用程序需要知道安装它的驱动器上的可用空间,您可以执行以下操作:

// returns something like "file:/C:/MyApp/my/pkg/MyClass.class"
// -OR- "jar:file:/C:/MyApp/myjar.jar!/my/pkg/MyClass.class"
String myPath = my.pkg.MyClass.class.getResource(MyClass.class).toString();
int start = myPath.indexOf("file:/") + 6;
FileSystemUtils.freeSpaceKb(myPath.substring(start, myPath.indexOf("/", start));

显然这段代码在applet中不起作用,但这并不奇怪。子串逻辑也应该更健壮,但这只是一个简单的例子。