gpt4 book ai didi

java - 如何使用 Java 中的自定义异常处理无效数据行?

转载 作者:行者123 更新时间:2023-12-01 16:13:56 25 4
gpt4 key购买 nike

我想在用 Java 导入和解析 csv 文件时处理无效数据行。如果我的程序不容纳特定值(例如教授作为职业),则应抛出 InvalidCharacteristicException。我的程序应该通过发出警告语句来处理此类异常,并显示配置文件中发现错误的行号。我尝试使用 try-catch 抛出每个枚举。

这是我的枚举数据。

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(int configLineNum)
{
super("WARNING: invalid characteristic in config file in line" +
+ configLineNum);
}
}

下面是我的 readCsv() 方法的一部分以及我尝试过的方法。

File file = new File(csvFile); 
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line = "";
String[] tempArr;

try{
if (BodyType.valueOf().toLowerCase() != tempArr[3]){
throw new InvalidCharacteristicException();
}

}catch(InvalidCharacteristicException e){
InvalidCharacteristicException();
}
try{

if (Profession.valueOf().toLowerCase() != tempArr[4]){
throw new InvalidCharacteristicException();
}
}catch(InvalidCharacteristicException e){
InvalidCharacteristicException()
}

以下是我希望如何更改此代码,以便代码迭代 csv 文件的整行并找到发生异常错误的行号。

for (total rows of the csv file)
{
if (tempArr[3] != BodyType.valueOf().toLowerCase())
{

throw new InvalidCharacteristicException();
}
if (tempArr[4] != Profession.valueOf().toLowerCase())
{
throw new InvalidCharacteristicException();
}
}

最佳答案

好的,所以我针对您的场景采取两种情况,首先假设您计划在遇到错误输入时抛出错误并停止执行,而在其他情况下您计划继续执行但只是记录有关错误输入的警告。两个代码片段如下:

File file = new File(csvFile); 
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line = "";
String[] tempArr;
String separator = ",";
int length=0;

while((line = br.readLine()) != null) {
tempArr = line.split(separator);
length = tempArr.length;
for(int column=0;column < length ; column++) {


if (column==3 && BodyType.valueOf().toLowerCase() != tempArr[column]){
throw new InvalidCharacteristicException(column);
}else if (column==4 && BodyType.valueOf().toLowerCase() != tempArr[column]){
throw new InvalidCharacteristicException(column);
}
}
}

上面一个是抛出并停止执行

File file = new File(csvFile); 
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line = "";
String[] tempArr;
String separator = ",";
int length=0;

while((line = br.readLine()) != null) {
tempArr = line.split(separator);
length = tempArr.length;
for(int column=0;column < length ; column++) {

try{
if (column==3 && BodyType.valueOf().toLowerCase() != tempArr[column]){
throw new InvalidCharacteristicException(column);
}else if (column==4 && BodyType.valueOf().toLowerCase() != tempArr[column]){
throw new InvalidCharacteristicException(column);
}
}catch(InvalidCharacteristicException e){
//Log error or warn using object e
}catch(Exception e){
//Log error or warn using object e
}
}
}

这只是继续执行。不要忘记关闭打开的资源。我没有将它们包含在代码中,因为主要焦点是循环记录。

关于java - 如何使用 Java 中的自定义异常处理无效数据行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62452458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com