java - 使用java从CSV读取列数据中的多行
问题描述
当我尝试使用 java 程序从 CSV 文件中读取列中的多行数据时,它没有提供工作,我为此使用了缓冲阅读器
我为此使用了缓冲阅读器
private static List<Book> readBooksFromCsv(String fileName) {
List<Book> books=new ArrayList<>();
Path filePath=Paths.get(fileName);
try {
BufferedReader br=Files.newBufferedReader(filePath,StandardCharsets.US_ASCII);
String line=br.readLine();
while(line!=null)
{
String []attribute=line.split(",");
Book book=createBook(attribute);
books.add(book);
line=br.readLine();
}
}
catch(IOException e)
{
e.printStackTrace();
}
return books;
}
private static Book createBook(String[] attribute) {
int transactionId=Integer.parseInt(attribute[0]);
int caseId=Integer.parseInt(attribute[1]);
String lastName=attribute[2];
return new Book(transactionId,caseId,lastName);
}
想要解决上述问题
解决方案
您需要使用 CSV 解析库,或者修改读取数据的方式。看看OpenCSV。
单个 CSV 记录包含一个或多个具有一个或多个换行符的值是可能且有效的。上面的代码假定每个 CSV 记录不包含换行符。
例如,您的代码将处理此问题:
Sally Smith,123,F
但是,您的代码会将以下内容解释为两个单独的 CSV 记录——一个包含单个 value Jeff
,另一个包含三个值,Johnson,333,M
而不是看到包含三个值的单个记录,其中第一个值包含换行符:
Jeff
Johnson,333,M
推荐阅读
- windows - 复制带有空格和大引号的文件
- kubernetes - 为什么有些 Kubernetes 的资源创建后是不可变的?
- python - SessionNotCreatedException:消息:会话未创建:此版本的 ChromeDriver 仅支持 Chrome 版本 81 I
- c++ - 我应该在 main 函数中写什么来测试我的问题 t 次?
- sql - SQL - 最大 ID 的总和
- angular - CKEditor 5 不能在生产构建 Angular 6 中工作
- css - CSS min() 函数到 SASS
- algorithm - 给定一个 DP 问题,我如何证明它等价于其他一些 DP 问题?
- python - 在 scikit-image 中使用 ORB 和 RANSAC 进行图像对齐
- typescript - 在 Typescript 中加载 json 文件作为对象而不是模块