0

阅读后,我试图从 CSV 文件中删除第一行。代码工作正常,但它在重写时将“”添加到我的数据中。例如:

  • 在写入 csv 文件之前:100,COMRADE,CAMPBELL
  • 写入 csv 文件后:"100","COMRADE","CAMPBELL"

    这是代码。

==================================================== =======================

public void deleteLineFromCsv() throws IOException {
        List<PatientsTabData> list = new ArrayList<>();
        BufferedReader reader = new BufferedReader(new FileReader(new File("src/main/resources/patients.csv")));
        String line = reader.readLine();
        while(line != null) {
            String[] split = line.split(",");
            list.add(new PatientsTabData().patientId(Integer.parseInt(split[0])).patName(split[1]).patLastName(split[2]));
            line = reader.readLine();
        }
        list.remove(0);
        CSVWriter writer = new CSVWriter(new FileWriter(new File("src/main/resources/patients.csv")));
        List<String[]> newlist = list.stream().map(item -> new String[]
                {String.valueOf(item.getPatientId()), item.getPatName(), item.getPatLastName()})
                .collect(Collectors.toList());
        writer.writeAll(newlist);
        writer.close();
    }

图书馆:

        <dependency>
            <groupId>net.sf.opencsv</groupId>
            <artifactId>opencsv</artifactId>
            <version>2.3</version>
        </dependency>
4

3 回答 3

1

创建编写器时,您可以使用另一个构造函数。改变

CSVWriter writer = new CSVWriter(new FileWriter(new File("src/main/resources/patients.csv")));

CSVWriter writer = new CSVWriter(new FileWriter(new File("src/main/resources/patients.csv")),',',CSVWriter.NO_QUOTE_CHARACTER);
于 2019-03-18T13:03:42.723 回答
0

这是将列表转换为逗号分隔的单个字符串的方法。

List<String[]> oldList= . . . ;
String requiredString = oldList
.stream()
    .map(Arrays::asList)
    .flatMap(Collection::stream)
    .collect(Collectors.joining(","));
于 2019-03-18T12:16:18.390 回答
0

您的 CSV 编写器正在将每个元素作为字符串写入 csv 文件。这可以在库中设计,因为它将在字符串中的数据中保留任何逗号,如果您的数据也有逗号,则以后不会添加额外的列。

"name","class","house, street, city","value"

请参阅您的库的文档并检查它是否提供了不将每个元素都视为字符串的选项。

但我的意见是将字符串保留在引号中,以避免在读取过程中出现数据描述。

于 2019-03-18T12:25:50.197 回答