我试图在读取后从CSV文件中删除第一行。代码运行正常,但是在重写时在数据中添加了“”。 例如:
写入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>
答案 0 :(得分: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);
答案 1 :(得分:0)
这是将列表转换为逗号分隔的单个字符串的方法。
List<String[]> oldList= . . . ;
String requiredString = oldList
.stream()
.map(Arrays::asList)
.flatMap(Collection::stream)
.collect(Collectors.joining(","));
答案 2 :(得分:0)
您的CSV编写器正在将每个元素作为字符串写入csv文件中。这可以通过库中的设计来完成,因为它将在字符串中的数据中保留任何逗号,如果您的数据中也包含逗号,以后将不会添加额外的列。
"name","class","house, street, city","value"
请参阅您的库的文档,并检查它是否提供了不将每个元素都视为字符串的选项。
但是我的意见是将字符串保留在引号中,以避免在读取过程中出现数据描述问题。