Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中使用自定义异常处理多个枚举的无效数据行?_Java_Exception - Fatal编程技术网

如何在Java中使用自定义异常处理多个枚举的无效数据行?

如何在Java中使用自定义异常处理多个枚举的无效数据行?,java,exception,Java,Exception,在Java中导入和解析csv文件时,我需要处理无效的数据行。 如果我的课程不符合特定的价值观(例如,教授作为职业) 应引发InvalidCharacteristicException。我的程序应该通过发出警告语句来处理此类异常,并在发现错误的配置文件中显示行号。但我不知道如何获取csv文件的总行数,以及如何处理多个枚举类型数据的异常。此外,我不太确定如何获取发生错误的确切位置 以下是enum Profession和enum BodyType示例 public enum Profession {

在Java中导入和解析csv文件时,我需要处理无效的数据行。 如果我的课程不符合特定的价值观(例如,教授作为职业) 应引发InvalidCharacteristicException。我的程序应该通过发出警告语句来处理此类异常,并在发现错误的配置文件中显示行号。但我不知道如何获取csv文件的总行数,以及如何处理多个枚举类型数据的异常。此外,我不太确定如何获取发生错误的确切位置

以下是enum Profession和enum BodyType示例

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);
需要抛出异常的任何位置