【问题标题】:Which exception to throw when a file is found but does not contain anything?找到文件但不包含任何内容时抛出哪个异常?
【发布时间】:2018-03-26 19:04:53
【问题描述】:

如果文件为空,应该抛出什么异常?

例如,

List<Cars> cars = new LinkedList<Cars>(); 

Scanner inFile = new Scanner(new FileReader(filename));

    if(!inFile.hasNextLine()) {
        throw new ???????????????????
    } 

    while(inFile.hasNextLine()) {
        String line = inFile.nextLine(); 

        String[] CarInfo = line.split("\\|"); 

        Car tmpCar = new Car(CarInfo[0],CarInfo[1],CarInfo[2]);

        cars.add(tmpCar);

    } 
    inFile.close(); 

谢谢

【问题讨论】:

  • IllegalArgumentException 是可能的,但您也应该提供有意义的信息。
  • 为什么要抛出异常?
  • 我会说:没有;空输入也不例外。
  • 去掉if,直接用nextLine,让用户抓到NoSuchElementException
  • 您有什么要求?此代码/方法的目的是什么?文件中的预期内容是什么?根据这些详细信息,它可能是IllegalArgumentExceptionNoSuchElementException、自定义异常或无异常。

标签: java exception exception-handling


【解决方案1】:

您可以使用自己的消息创建自己的自定义异常类,如下所示:

public class EmptyFileException extends Exception {

    private String message = "The file is empty!";

    public EmptyFileException() {
        super(message);
    }

}

然后在你的代码中你可以抛出新的异常:

Scanner inFile = new Scanner(new FileReader(filename)); 

if(!inFile.hasNextLine()) {
    throw new EmptyFileException();
}
// ...

B.

【讨论】:

    【解决方案2】:

    您可以创建自己的异常。

    class EmptyExceptoin extends Exception
        {
    
          public EmptyException() {}
    
          public EmptyException(List list)
          {
             super(list);
          }
     }
    

    然后在你的代码中抛出异常:

       Scanner inFile = new Scanner(new FileReader(filename)); 
    
            if(!inFile.hasNextLine()) {
                throw new EmptyException();
            }
    

    【讨论】:

      【解决方案3】:

      对于这种文件存在但为空的情况,标准 Java 库没有一般例外。

      看起来这种情况对您的应用程序来说很特别。因此,您可以通过扩展 Exception 类来创建自己的异常类型。看看这里 - How to create custom exceptions in Java?

      【讨论】:

        【解决方案4】:

        你有两种可能性:

        • 抛出RuntimeException,例如IllegalArgumentException如果异常不可恢复,请从客户端执行此操作。

        • 抛出自定义检查异常如果异常必须由客户端处理。例如EmptyFileExceptionpublic class EmptyFileException extends Exception{ }

        【讨论】:

          【解决方案5】:

          创建一个继承自异常类的自定义异常类

          Class EmptyFileException extends Exception{
              public EmptyFileException(){
              }
              public EmptyFileException(String customMessage){
                  super(customMessage)
              }
          }
          

          您可以在 try catch 或任何 if 语句中使用它

          try
          {
             //do stuff.....
          }catch(Exception e){
             throw new EmptyFileException("File not found") 
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-04-06
            • 2011-04-27
            • 1970-01-01
            • 2016-05-14
            • 1970-01-01
            • 2017-07-23
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多