首页 > 解决方案 > 使用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);

    }

想要解决上述问题

标签: java

解决方案


您需要使用 CSV 解析库,或者修改读取数据的方式。看看OpenCSV

单个 CSV 记录包含一个或多个具有一个或多个换行符的值是可能且有效的。上面的代码假定每个 CSV 记录不包含换行符。

例如,您的代码将处理此问题:

Sally Smith,123,F

但是,您的代码会将以下内容解释为两个单独的 CSV 记录——一个包含单个 value Jeff,另一个包含三个值,Johnson,333,M而不是看到包含三个值的单个记录,其中第一个值包含换行符:

Jeff
Johnson,333,M

推荐阅读