Java OpenCsv-在字段上设置自定义验证
我正在使用OpenCsv将csv文件转换为JavaBean 我的文件如下所示:Java OpenCsv-在字段上设置自定义验证,java,opencsv,Java,Opencsv,我正在使用OpenCsv将csv文件转换为JavaBean 我的文件如下所示: USER_NAME, USER_ID, FREQUENCY aaa,111,DAILY bbb,222,WEEKLY, ccc,333,MONTHLY ddd,444,SOME_RANDOM_VALUE eee,555,YEARLY 我需要对列强制执行以下验证: USER_NAME -> not null, alphabets only USER_ID -> not null, digits only
USER_NAME, USER_ID, FREQUENCY
aaa,111,DAILY
bbb,222,WEEKLY,
ccc,333,MONTHLY
ddd,444,SOME_RANDOM_VALUE
eee,555,YEARLY
我需要对列强制执行以下验证:
USER_NAME -> not null, alphabets only
USER_ID -> not null, digits only
FREQUENCY -> not null, allowed values - DAILY, WEEKLY, MONTHLY, YEARLY
对于任何其他频率值,记录用户名,如下所示:
频率
我只需要记录该行并像往常一样继续流,即“eeee”应该映射到javabean
基于,我在JavaBean中创建了以下逻辑
问题是流停止时使用了“dddd”,而“eeee”没有映射
class UserBean {
private String userName;
private String userID;
private String frequency;
//Getters and Setters for userName, userID
public void setFrequency(String frequency) {
if(frequency.isEmpty() && !(frequency.equalsIgnoreCase("DAILY") && frequency.equalsIgnoreCase("WEEKLY") && frequency.equalsIgnoreCase("MONTHLY") && frequency.equalsIgnoreCase("YEARLY"))) {
throw new IllegalArgumentException("Invalid value for FREQUENCY");
}
}
}
public static void main() {
CsvToBean<UserBean> csvToBean = new CsvToBean<UserBean>();
Reader reader = new FileReader((File) INPUT_DIR);
csvToBean = new CsvToBeanBuilder(reader).withSeparator(',')
.withType(User.class)
.withOrderedResults(true)
.withIgnoreLeadingWhiteSpace(true)
.build();
Iterator<PrimeAOBean> csvUserIterator = csvToBean.iterator();
List<Exception> exceptionList = new ArrayList<Exception>();
while (csvUserIterator.hasNext()) {
try {
UserBean userBean = csvUserIterator.next();
userDataMap.put(userBean.getUserID(), userBean);
}
catch(Exception e) {
exceptionList.add(e);
continue;
}
finally {
FileWriter fileWriter = new FileWriter(ERROR_DIR);
PrintWriter printWriter = new PrintWriter(fileWriter);
for (Exception excep: exceptionList) {
printWriter.print(excep.getLocalizedMessage());
printWriter.close();
}
continue;
}
}
}
类UserBean{
私有字符串用户名;
私有字符串用户标识;
专用字符串频率;
//用户名、用户ID的getter和setter
公共无效设置频率(字符串频率){
if(frequency.isEmpty()&&&!(frequency.equalsIgnoreCase(“每日”)&&frequency.equalsIgnoreCase(“每周”)&&frequency.equalsIgnoreCase(“每月”)&&frequency.equalsIgnoreCase(“年度”)){
抛出新的IllegalArgumentException(“频率无效值”);
}
}
}
公共静态void main(){
CsvToBean CsvToBean=新的CsvToBean();
Reader Reader=新文件读取器((文件)输入目录);
csvToBean=新的CsvToBeanBuilder(读卡器)。带分隔符(“,”)
.withType(User.class)
.withOrderedResults(真)
.带忽略前导空格(true)
.build();
迭代器csvUserIterator=csvToBean.Iterator();
列表例外列表=新建ArrayList();
while(csvUserIterator.hasNext()){
试一试{
UserBean UserBean=csvUserIterator.next();
put(userBean.getUserID(),userBean);
}
捕获(例外e){
例外列表。添加(e);
继续;
}
最后{
FileWriter FileWriter=新的FileWriter(错误\u DIR);
PrintWriter PrintWriter=新的PrintWriter(fileWriter);
for(例外:例外列表){
printWriter.print(getLocalizedMessage()除外);
printWriter.close();
}
继续;
}
}
}
您可以添加。使用ThroweExceptions(false)忽略运行时异常(如上所述)您不是在寻找BeanVerifier吗?然而,我找不到任何关于如何使用它的例子。