package com;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import com.opencsv.CSVWriter;
import com.opencsv.CSVReader;
public class Sample2 {
public static void main(String args[]) throws IOException
{
CSVReader csvReader = null;
String[] employeeDetails ;
CSVWriter csvWriter = new CSVWriter(new FileWriter("D:\\sample\\myfile.csv",true));
csvReader = new CSVReader(new FileReader("D:\\sample\\source.csv"));
try
{
employeeDetails = csvReader.readNext();
while ((employeeDetails = csvReader.readNext()) != null ) {
System.out.println(Arrays.toString(employeeDetails));
csvWriter.writeNext(employeeDetails);
}
}catch(Exception ee)
{
ee.printStackTrace();
}
}
}
我有上面的Java代码 它从source.csv文件中读取数据,并显示在控制台中。 它创建了myfile.csv,但是没有在csv文件中写入的内容相同 任何人对此都有任何想法
答案 0 :(得分:1)
CSVWriter实现了Flushable。@ Stephan Hogenboom的答案中已经提供了工作解决方案。我会回答为什么它没有写成您的情况,
从Flushable
界面的javadocs中,
可刷新是可刷新数据的目标。同花顺 调用方法将任何缓冲的输出写入基础 流。
出于性能方面的考虑,所有数据都应暂时写入缓冲区而不是文件中。调用flush()方法后,它会将缓冲区中已经存在的数据刷新到文件中(这是磁盘I / O发生的位置,调用writeNext()
时不是)。
如flush()
中java.io.Writer
的文档所述。
刷新流。如果流中已保存来自 缓冲区中的各种write()方法,将它们立即写入它们的 预定目的地。
答案 1 :(得分:0)
问题是您没有关闭输出资源,请尝试以下代码:
public static void main(String args[]) throws IOException {
String[] employeeDetails;
try (CSVWriter csvWriter = new CSVWriter(new FileWriter("D:\\sample\\myfile.csv", true));
CSVReader csvReader = new CSVReader(new FileReader("D:\\sample\\source.csv"));
) {
while ((employeeDetails = csvReader.readNext()) != null) {
System.out.println(Arrays.toString(employeeDetails));
csvWriter.writeNext(employeeDetails);
}
}
catch (Exception ee) {
ee.printStackTrace(); //perhaps you should also log the error?
}
}