第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用FlatFileItemReader讀取csv文件,遇到空列時(shí)拋出異常

使用FlatFileItemReader讀取csv文件,遇到空列時(shí)拋出異常

Smart貓小萌 2023-09-06 16:15:08
使用FlatFileItemReader讀取csv文件時(shí),有一列映射類型為Int,但該列在csv文件中為空(eg:.6321517,Jack, 1,,最后兩列為空)。java.lang.NumberFormatException: Unparseable number解析文件時(shí)拋出異常( )數(shù)據(jù)集CUSTR_NBR,SUR_NAME,CHECK_FLAG,RESN_CODE6321517,Jack,1,,首先解析第一行數(shù)據(jù)(CUSTR_NBR,SUR_NAME,CHECK_FLAG,RESN_CODE),所以我設(shè)置.SetLinesToSkip(1). 但如果解析出空值,對(duì)應(yīng)的“CHECK_FLAG”和“RESN_CODE”就無法正常執(zhí)行。我相信有相應(yīng)的配置項(xiàng)。我查看了springbatch的文檔,沒有找到相關(guān)的配置項(xiàng)。csvItemReader    @Bean    @StepScope    public FlatFileItemReader<InfoDTO> csvItemReader() {        FlatFileItemReader<InfoDTO> csvItemReader = new FlatFileItemReader<>();        csvItemReader.setResource(new ClassPathResource("data/charge-off.csv"));        csvItemReader.setLinesToSkip(1);        DelimitedLineTokenizer tokenizer=new DelimitedLineTokenizer();        String[] tokens = new String[]{"CUSTR_NBR","SUR_NAME","CHECK_FLAG","RESN_CODE","EMPNO"};        tokenizer.setNames(tokens);        DefaultLineMapper<InfoDTO> lineMapper=new DefaultLineMapper<InfoDTO>();        lineMapper.setLineTokenizer(tokenizer);        lineMapper.setFieldSetMapper(new InfoFileMapper());        lineMapper.afterPropertiesSet();        csvItemReader.setLineMapper(lineMapper);        return csvItemReader;    }映射器    public class InfoFileMapper implements FieldSetMapper<ChargeOffBatchDTO> {        @Override        public InfoDTO mapFieldSet(FieldSet fieldSet) throws BindException {            if(fieldSet == null){                return null;            }            return new InfoDTO(                fieldSet.readString("CUSTR_NBR"),                fieldSet.readString("SUR_NAME"),                fieldSet.readString("CHECK_FLAG"),                fieldSet.readInt("RESN_CODE"),                fieldSet.readInt("EMPNO")            );        }    }我需要將空列映射為0值,如何配置?
查看完整描述

2 回答

?
小怪獸愛吃肉

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊

我沒有使用過 Spring Batch,但查看FieldSet Interface 規(guī)范,似乎有一些替代方法可以實(shí)現(xiàn)您想要的目標(biāo)。

然而, Spring?Batch 參考確實(shí)提到了一些容錯(cuò)能力,特別是當(dāng)值不存在時(shí)拋出異常。為了禁用此功能,您需要將 strict 設(shè)置為false

tokenizer.setStrict(false);

否則,您可以簡(jiǎn)單地嘗試一些舊的時(shí)尚替代方案,例如不要嘗試將值直接讀入 an?int,只需將其讀入 String ,然后在將其轉(zhuǎn)換為 String 之前驗(yàn)證該 Stringint

String empNo = fieldSet.readString("EMPNO");

if ((empNo == null) || (empNo.equals(""))) {

? empNo = "0";

}

int i = Integer.valueOf(empNo);

如果字段不為空且不是字符串,您可能仍然會(huì)得到一個(gè)java.lang.NumberFormatException,所以就我個(gè)人而言,我會(huì)通過處理異常來解決問題:


int myEmp = 0;

try {

? myEmp = fieldSet.readInt("EMPNO");

} catch (NumberFormatException nfe) {

? myEmp = 0;

}

也許不是那么雄辯,但它會(huì)起作用并達(dá)到目的。


查看完整回答
反對(duì) 回復(fù) 2023-09-06
?
慕標(biāo)琳琳

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊

您可以創(chuàng)建自己的行映射器實(shí)現(xiàn),并檢查子字符串是否為空,并將其替換為零,然后向前傳遞該行。



查看完整回答
反對(duì) 回復(fù) 2023-09-06
  • 2 回答
  • 0 關(guān)注
  • 129 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)