gpt4 book ai didi

java - Flume 拦截器在读取时忽略输入 CSV 文件头

转载 作者:行者123 更新时间:2023-11-30 06:59:15 25 4
gpt4 key购买 nike

我的输入文件内容如下:

Name,Age,Date
abc,26,2016-12-16 00:00:01
pqr,25,2016-12-17 12:00:00

我的输出文件必须是:

Name,Age,Date
ABC,26,2016-12-16 05:30:01
PQR,25,2016-12-17 17:30:00

我正在使用 FLUME-INTERCEPTOR 进行文件转换和输出文件移动。

我写了下面的逻辑。但有一个明显的异常“无法解析日期”。基本上,我必须忽略输入文件头,即名称,年龄,日期。如何用我的下面的代码实现这一点

        SimpleDateFormat a = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date =new Date();

String line = new String(startEventBody);


String[] token = line.split(",");
date=a.parse(token[2]);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.HOUR_OF_DAY, 5);
cal.add(Calendar.MINUTE, 30);


String b = a.format(cal.getTime()).toString();

token[0] = token[0].toUpperCase();
token[2]=token[2].replace(token[2], b);

String newLine = "";
for (String s : token) {
newLine += s + ",";
}

newLine = newLine.replaceAll("\\r\\n|\\r|\\n", "");

this.outputStream = new ByteArrayOutputStream(newLine.getBytes().length);

this.outputStream.write(newLine.getBytes());


return this.outputStream.toByteArray();

最佳答案

您可以使用DateFormat.setLenient

在不离开标题第一行的情况下,您可以检查日期格式的完整性,如下所示

...

SimpleDateFormat a = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
a.setLenient(false);
Date date =new Date();
String line = new String(startEventBody);
String[] token = line.split(",");
if(a.parse(token[2], new ParsePosition(0)) != null){
date = a.parse(token[2]);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.HOUR_OF_DAY, 5);
cal.add(Calendar.MINUTE, 30);
token[2] = a.format(cal.getTime()).toString(); //rewrites new date string to token[2]
}

token[0] = token[0].toUpperCase();

...

注意:当然,您也可以检查 String Date 而不是 DateFormat

关于java - Flume 拦截器在读取时忽略输入 CSV 文件头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41219549/

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