Java 当一个文件可以读取,但文件';s的数据格式不正确?

Java 当一个文件可以读取,但文件';s的数据格式不正确?,java,exception-handling,Java,Exception Handling,如果已成功读取指定的文件,但文件中的数据不正确,例如格式不正确的XML,或指定错误变量或缺少节的ini文件,或类似情况,在这种情况下应使用什么异常 使用带有详细异常消息的IOException有意义吗,还是应该使用其他类型的异常?标准库中的此类事件似乎没有良好的异常类型。不要使用IOException——文件已打开并已成功读取;问题在于它的内容。您可以抛出一个IllegalArgumentException,或者创建自己的异常类型 不要使用IOException——文件已打开并读取成功;问题在于

如果已成功读取指定的文件,但文件中的数据不正确,例如格式不正确的XML,或指定错误变量或缺少节的ini文件,或类似情况,在这种情况下应使用什么异常


使用带有详细异常消息的IOException有意义吗,还是应该使用其他类型的异常?标准库中的此类事件似乎没有良好的异常类型。

不要使用
IOException
——文件已打开并已成功读取;问题在于它的内容。您可以抛出一个
IllegalArgumentException
,或者创建自己的异常类型

不要使用
IOException
——文件已打开并读取成功;问题在于它的内容。您可以抛出一个
IllegalArgumentException
,或者创建自己的异常类型

这是一个风格问题,因为“技术上”不管你抛出什么类型的异常;它可以是一个标准,甚至只是一个标准,包含你在其中输入的任何额外信息

也就是说,正如其他人所建议的,这可能是一个更好的选择,即“自己动手”

public class InvalidFormatting extends java.lang.Throwable
{
    /** The underlying error of this instance */
    public final static String Error = "An invalid format has been detected";

    /** Create a new {@code InvalidFormatting} exception */
    public InvalidFormatting() {
        super(InvalidFormatting.Error);
    }

    /**
     * Create a new {@code InvalidFormatting} exception with additional information
     *
     * @param additionalMsg The additional information to append
     */
    public InvalidFormatting(String additionalMsg) {
        super(InvalidFormatting.Error + "\n" + additionalMsg);
    }
}
那么它就可以这样使用了

throw new InvalidFormatting("here's some extra info");

希望这能有所帮助。

这是一个风格问题,因为“技术上”不管你抛出什么类型的异常;它可以是一个标准,甚至只是一个标准,包含你在其中输入的任何额外信息

也就是说,正如其他人所建议的,这可能是一个更好的选择,即“自己动手”

public class InvalidFormatting extends java.lang.Throwable
{
    /** The underlying error of this instance */
    public final static String Error = "An invalid format has been detected";

    /** Create a new {@code InvalidFormatting} exception */
    public InvalidFormatting() {
        super(InvalidFormatting.Error);
    }

    /**
     * Create a new {@code InvalidFormatting} exception with additional information
     *
     * @param additionalMsg The additional information to append
     */
    public InvalidFormatting(String additionalMsg) {
        super(InvalidFormatting.Error + "\n" + additionalMsg);
    }
}
那么它就可以这样使用了

throw new InvalidFormatting("here's some extra info");

希望这能有所帮助。

如果找不到适合您需要的异常,请使用您自己的异常类型。如果您的代码指出数据不正确,则应创建自己的异常并将其抛出。否则,您将使用一个库,该库告诉您数据的格式不正确,可能是通过抛出Exception,也可能是IOException的某些子类,例如CharConversionExceptin或StreamCorruptedException,或者是您自己创建的。(您知道如何找到IOException的子类,对吗?)取决于消息的对象。您可以使用带有详细信息的
IOException
,或者创建自己的
Exception
RuntimeException
,或者其他适当的子类。是的,我知道如何找到类的子类:P最接近我的特定情况的是InvalidPropertiesFormatException,因为我处理的是一个INI文件,它需要在一个特定的范围内具有多个属性。如果找不到适合您需要的异常,请使用您自己的异常类型。如果您的代码指出数据不正确,则应创建您自己的异常并将其抛出。否则,您将使用一个库,该库告诉您数据的格式不正确,可能是通过抛出Exception,也可能是IOException的某些子类,例如CharConversionExceptin或StreamCorruptedException,或者是您自己创建的。(您知道如何找到IOException的子类,对吗?)取决于消息的对象。您可以使用带有详细信息的
IOException
,或者创建自己的
Exception
RuntimeException
,或者其他适当的子类。是的,我知道如何找到类的子类:P最接近我的特定情况的是InvalidPropertiesFormatException,因为我处理的是一个INI文件,它需要在一个特定的范围内具有多个属性。