如何在Java中使用自定义异常处理多个枚举的无效数据行?
在Java中导入和解析csv文件时,我需要处理无效的数据行。 如果我的课程不符合特定的价值观(例如,教授作为职业) 应引发InvalidCharacteristicException。我的程序应该通过发出警告语句来处理此类异常,并在发现错误的配置文件中显示行号。但我不知道如何获取csv文件的总行数,以及如何处理多个枚举类型数据的异常。此外,我不太确定如何获取发生错误的确切位置 以下是enum Profession和enum BodyType示例如何在Java中使用自定义异常处理多个枚举的无效数据行?,java,exception,Java,Exception,在Java中导入和解析csv文件时,我需要处理无效的数据行。 如果我的课程不符合特定的价值观(例如,教授作为职业) 应引发InvalidCharacteristicException。我的程序应该通过发出警告语句来处理此类异常,并在发现错误的配置文件中显示行号。但我不知道如何获取csv文件的总行数,以及如何处理多个枚举类型数据的异常。此外,我不太确定如何获取发生错误的确切位置 以下是enum Profession和enum BodyType示例 public enum Profession {
public enum Profession {
DOCTOR, CEO, CRIMINAL, HOMELESS, UNEMPLOYED , UNKNOWN, NONE;
}
public enum BodyType {
SLIM, OBESE, ATHLETIC, UNSPECIFIED;
}
以下是csv的外观
[0], [1], [2], [3] , [4] , [5] , [6] , [7] , [8] , [9]
class, gender, age, bodyType, profession, pregnant, isYou ,species, isPet, role
scenario:green, , , , , , , ,
person, female, 24, average , , FALSE , , , , passenger
animal, male , 4, , , FALSE , , dog , TRUE , pedestrian
.
.
以下是我的想法和我的尝试。
这是我的自定义例外
public class InvalidCharacteristicException extends Exception
{
public InvalidCharacteristicException()
{
super("WARNING: invalid characteristic in config file in line" +
+ Thread.currentThread().getStackTrace()[1].getLineNumber());
}
}
下面是我的readCsv()方法的一部分以及我的想法
File file = new File(csvFile);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line = "";
String[] tempArr;
for (total rows of the csv file)
{
if (tempArr[3] is not BodyType.valueOf())
{
throw new InvalidCharacteristicException();
}
if (tempArr[4] is not Profession.valueOf())
{
throw new InvalidCharacteristicException();
}
}
这种方法的问题在于,返回代码中引发
InvalidCharacteristicException
的行号(在文档中特别称为源行),而不是引发它的配置中的行号。我们可以通过如下更改InvalidCharacteristicException
来解决此问题:
class InvalidCharacteristicException extends Exception {
public InvalidCharacteristicException(int configLineNum) {
super("WARNING: invalid characteristic in config file in line " + configLineNum);
}
}
现在我们正在传递配置行号,我们需要在的中跟踪它。您不会显示正在使用的
的确切的,但假设您可以跟踪名为configLineNum
的变量(例如,您可以在每次处理一行时显式地将configLineNum
增加1),那么您将使用
throw new InvalidCharacteristicException(configLineNum);
需要抛出异常的任何位置