【发布时间】:2022-01-24 15:55:12
【问题描述】:
我的任务是编写一个方法,该方法将接收一个 csv 文件并将其数据保存到数据库中的适当空间中。当直接输入csv数据时,我编写的函数就成功了。但是,当使用 cURL 并输入整个 csv 文件时,它不会读取换行符。实际上,csv 然后变成一行 x 列数,其中 x 是文件中的单元格数。我尝试更改 csv 格式(例如使用回车与换行),但似乎没有任何效果。附件是通过csv运行的代码,它接受InputStream csvData:
CSVReader reader = new CSVReader(new InputStreamReader(csvData));
String[] line;
int bookNum = 1, lineNum = 2; // skip headers
while ((line = reader.readNext()) != null) {
// map line
String productCode = line[0];
String author = line[1];
String description = line[2];
Integer edition;
try {
edition = Integer.parseInt(line[3].replaceAll("[^\\d.]", ""));
} catch (NumberFormatException nfe) {
edition = null;
}
String copyright = line[4];
String publisher = line[5];
BigDecimal listPrice = !line[6].equals("") ? new BigDecimal(line[6]) : null;
// do stuff with data...
if (bookNum == 1) System.out.println("1 book has been processed");
else System.out.println(bookNum + " books have been processed");
++bookNum;
++lineNum;
}
【问题讨论】:
-
您应该简化问题以隔离问题。听起来您正在下载的文件无效并且缺少行尾字符,但这也可能是您将下载内容写入磁盘的方式。
-
@Deadron 我对 csv 执行了 hexdump,它似乎有行尾字符,但 CSVReader 似乎无法识别它们。
-
会不会是windows和linux EOL字符的区别?
-
@Yepher 这是我的第一个猜测,但我尝试了 EOL 字符的回车和换行,但似乎没有任何区别。
-
如何在该代码中将数据打包到“csvData”中?填充该变量时,您是否可能正在执行“readline”?如果是这样,在那种情况下它是否剥离了 \n?