Java 使用CsvBeanReader时是否有跳过标题的方法?
我有一个项目,其中我应该将对象写入CSV文件。我目前正在使用ICsvBeanWriter,但每次传递新记录时,它都会写入标题。读取文件时会产生问题 以下分别是阅读和写作的方法:Java 使用CsvBeanReader时是否有跳过标题的方法?,java,supercsv,Java,Supercsv,我有一个项目,其中我应该将对象写入CSV文件。我目前正在使用ICsvBeanWriter,但每次传递新记录时,它都会写入标题。读取文件时会产生问题 以下分别是阅读和写作的方法: public static ArrayList<communication> readCSV() throws IOException { ArrayList<communication> fileText = new ArrayList<>(); ICsvBe
public static ArrayList<communication> readCSV() throws IOException {
ArrayList<communication> fileText = new ArrayList<>();
ICsvBeanReader beanReader = new CsvBeanReader(new FileReader("products.csv"), CsvPreference.STANDARD_PREFERENCE);
String[] header = beanReader.getHeader(true);
CellProcessor[] processors = new CellProcessor[]{
new ParseDouble(), // Distance
new ParseDouble(), // Efficiency
new ParseDouble(),// fuel
new ParseDouble(),// total
};
communication com;
while ((com = beanReader.read(communication.class, header, processors)) != null) {
fileText.addAll(Collections.singletonList(com));
}
return fileText;
}
public static void writeCSV(double tripDistance, double fuelEfficiency, double costOfFuel, double totalCost) throws Exception {
// create a list of employee
List<communication> EmployeeList = new ArrayList<>();
EmployeeList.add(new communication(tripDistance, fuelEfficiency, costOfFuel, (Math.round(totalCost * 100.0) / 100.0)));
ICsvBeanWriter beanWriter = new CsvBeanWriter(new FileWriter("products.csv",true),
CsvPreference.STANDARD_PREFERENCE);
String[] header = new String[]{"TripDistance", "FuelEfficiency", "FuelCost", "Total"};
beanWriter.writeHeader(header);
CellProcessor[] processors = new CellProcessor[]{
new ParseDouble(), // Distance
new ParseDouble(), // Efficiency
new ParseDouble(),// fuel
new ParseDouble(),// total
};
for (communication com : EmployeeList) {
beanWriter.write(com, header, processors);
}
beanWriter.close();
}
这些代码行创建一个标题:
String[] header = new String[]{"TripDistance", "FuelEfficiency", "FuelCost", "Total"};
beanWriter.writeHeader(header);
我想您可以从代码中删除它们。首先,您用opencsv标记了它,但实际上您似乎是在基于代码中的类名使用supercsv。这个答案是基于这一观察 阅读时跳过页眉的两种方法 选项1:reader类有一个getHeader()方法,根据文档,该方法可以完成这项工作 选项2:传递给CsvBeanReader的第一个参数是一个应该传递数据的读取器 所以如果你想跳过一个标题,你可以给它一个已经跳过的阅读器。BufferedReader有一种方便的读取行的方法,因此您可以丢弃第一行。这是假设CSV格式正确,顶部没有空行
BufferedReader br = new BufferedReader(new FileReader("products.csv"));
br.readLine(); // discard header
ICsvBeanReader beanReader = new CsvBeanReader(br, CsvPreference.STANDARD_PREFERENCE);
如果使用选项2,它将只跳过第一个标题,而不会跳过其余标题@Gimby这是一个很奇怪的说法。应该只有第一个标题。您所说的“其余部分”是什么意思?不是删除标题初始化部分而是删除
writeHeader()
BufferedReader br = new BufferedReader(new FileReader("products.csv"));
br.readLine(); // discard header
ICsvBeanReader beanReader = new CsvBeanReader(br, CsvPreference.STANDARD_PREFERENCE);