【问题标题】:Getting IOException while getting free Space on the working drive在工作驱动器上获得可用空间时获得 IOException
【发布时间】:2013-04-25 07:24:52
【问题描述】:

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

【问题讨论】:

  • 出现此错误的 Windows 版本是什么?您使用的是 Java 6 还是 7?您也可以发布 SecurityException 的堆栈跟踪吗?
  • 嗨 Philipp,感谢您的回复,我编辑了我的问题,最后一个 new File().getFreeSpace() 我没有使用,我只是找到它作为替代方案。我尝试使用 java 6 和 java 7 都
  • new File("c:\\").getFreeSpace(); 至少在我的机器上运行良好
  • 谁能告诉我使用 ew File("c:\\").getFreeSpace();而不是 long freeSpace = FileSystemUtils.freeSpaceKb() * 1024;为什么?
  • 再次,这是在哪个 Windows 版本上发生的? FileSystemUtils.freeSpaceKb() 在 Windows 8 上运行良好;错误代码 3 表示“找不到路径”。您是从网络驱动器还是从本地驱动器运行程序?在你的程序中添加System.out.println(new File(".").getAbsolutePath()); 的输出是什么?

标签: java memory-management


【解决方案1】:

您可以尝试从提示符处执行该命令。运行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));

显然,这段代码不能在小程序中运行,但这并不奇怪。子串逻辑也应该更健壮,但这只是一个简单的例子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多