4

我正在开发一个应用程序,它首先需要在运行任何操作之前检查可用的可用磁盘空间。我们已经设置了一些默认所需的空间限制,例如 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 中可用的替代方法 -如何使用 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\
4

1 回答 1

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 中运行,但这不足为奇。子串逻辑也应该更健壮,但这只是一个简单的例子。

于 2013-05-04T05:37:58.983 回答