有没有办法以编程方式区分导致IOException的原因?例如,如果在写入期间发生错误,Java将抛出IOException。如果磁盘空间不足,有人断开网络驱动器或其他东西,我该如何判断是否存在访问冲突?
我无法真正解析消息,因为似乎没有任何标准化的消息格式,Sun(或者我现在认为的Oracle)似乎没有任何标准格式。
(我需要使用Java来修复一个非常破碎的系统。)
答案 0 :(得分:5)
不幸的是,Java没有相当于.NET的System.Runtime.InteropServices.Marshal.GetHRForException()
。只有在异常是子类的实例时才会告诉它是什么类型的I / O错误,例如FileNotFoundException
。
答案 1 :(得分:0)
获取异常的确切类将为您提供一些可能的IOException子类之一,这些都是非常标准化的。您可以使用instanceof
或(粗暴的方法)测试类来比较从getClass().getName()
返回的字符串。
其他一些东西有一些解决方法;你可以对你要打开的文件做一个File.canWrite()
(好吧,如果名字和/或目录不同,你的程序应该已经完成了),如果有可能你用完了在文件空间中,你可以尝试将一个小文件写入一个已知的好位置,看看是否会爆炸。不是很优雅,我知道:Java并不是一种真正的系统编程语言。
另一方面,经常知道异常的详细原因并没有多大帮助:无论有没有知识,您的用户可能根本无法让程序完成所需的操作。