例如,我应该按照以下格式编写此文件:
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
}
我希望自己清楚明白,否则只是让我知道,我会尝试更好地解释它。
答案 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
并在出现解析错误时将其抛出。