使用Java从CSV读取列数据中的多行

时间:2019-07-15 12:01:32

标签: java

当我尝试使用java程序从CSV文件中读取列中的多行数据时,它没有提供工作,为此我使用了缓冲的Reader

我为此使用了缓冲读卡器

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);

    }

想解决上述问题

1 个答案:

答案 0 :(得分:0)

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

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

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

Sally Smith,123,F

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

Jeff
Johnson,333,M