当文件格式不正确/为空时抛出什么异常

时间:2014-09-02 05:52:10

标签: java exception

例如,我应该按照以下格式编写此文件:

PersonName
2,5,6,7,8,9

第一行只有一个名称,从第二行开始它的所有逗号分隔值。 结束新的一行。出于某种原因,我无法以代码格式创建一个新的空行。

现在假设这些逗号分隔值将被复制到ArrayList,然后检查ArrayList是否为空。如果它是空的我会抛出异常。我的问题是,抛出什么例外?

像(在伪代码中)的东西:

FileReader fr = new FileReader(f);
BufferedReader buffReader = new BufferedReader(fr);

ArrayList list = new ArrayList();

while(interator.hasCSV) {
// copy values to list
    Object obj = interator.next();
    list.add(obj);
}

if(list.isEmpty()) {
   // What exception to throw here?
   // It means there was a name in the file (first line) but then no csv values 
}

我希望自己清楚明白,否则只是让我知道,我会尝试更好地解释它。

4 个答案:

答案 0 :(得分:2)

正如paxdiablo所说,你可以创建自己的例外,这是一个例子link

class CheckListException extends Exception
{
      //Parameterless Constructor
      public CheckListException() {}

      //Constructor that accepts a message
      public CheckListException(List list)
      {
         super(list);
      }
 }

使用例外

 try
 {
    if(list.isEmpty()) {
         // What exception to throw here?
         // It means there was a name in the file (first line) but then no csv values 
          throw new CheckListException();
    }
 }
 catch(CheckListException ex)
 {
      //Process message however you would like
 }

答案 1 :(得分:1)

由于您可以创建所需的任何标准,因此无需使用Java中定义的标准语言。

看起来(来自here)标准集中最接近的那个可能是DataFormatException(请参阅here),那是&#39}针对ZIP文件。

也许更好的匹配是ParseException。如果你想使用一个更有针对性的标准,那就是我想要使用的那个(如果你不想创建自己的),或继承(如果你这样做)

但请记住,如果您不过度关注层次结构中的位置,则可以始终从顶级Exception类继承。

答案 2 :(得分:1)

创建自己的例外。有关详细信息,请参阅this

if()//your condition
  /*create custom exeception*/
  throw new Exception("My custom exception");
}

但这是一次例外

您必须按照上述链接为重复使用的自定义例外创建新类。

答案 3 :(得分:1)

将所有负责解析文件内容的代码放在自己的方法中是正常的。大多数解析器交错从输入流中读取并检查它已读取的内容。这样的方法必须声明它throws IOException,因为从输入流中读取的方法部分可以抛出IOException。如果通过抛出IOException指示解析错误 ,解析方法将更容易使用:方法的调用者可以使用一个catch来处理所有问题,如果他们对问题的细节不感兴趣。

然而,该方法的调用者可能希望能够区分不同类型的问题。调用者可能希望报告丢失文件和格式不正确的文件的不同错误消息。为了支持这一点,您可以创建自己的InvalidFormatException extends IOException并在出现解析错误时将其抛出。