Java读取CSV文件,内容不写入新的CSV文件
我有上面的java代码 它从source.csv文件读取数据,并显示在控制台中。 它创建了myfile.csv,但没有在csv文件中写入相同的内容Java读取CSV文件,内容不写入新的CSV文件,java,csv,opencsv,Java,Csv,Opencsv,我有上面的java代码 它从source.csv文件读取数据,并显示在控制台中。 它创建了myfile.csv,但没有在csv文件中写入相同的内容 任何人对此有任何想法问题是您没有关闭输出资源,请尝试以下代码: package com; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Arrays; import com.opencsv.CSVWr
任何人对此有任何想法问题是您没有关闭输出资源,请尝试以下代码:
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();
}
}
}
再看看这个问题。CSVWriter实现了Flushable。工作解决方案已经出现在@Stephan Hogenboom的答案中。我会回答为什么没有写在你的案子里 从
Flushable
接口的javadocs中
Flushable是可以刷新的数据的目标。同花顺
方法以将任何缓冲输出写入底层
小溪
出于性能原因,所有数据都将临时写入缓冲区而不是文件。调用flush()方法后,它会将缓冲区中已经存在的数据刷新到文件中(这是磁盘I/O发生的地方,而不是调用writeNext()
)
如java.io.Writer
中flush()
的文档所述
冲过小溪。如果流已从中保存任何字符
在缓冲区中的各种write()方法,立即将它们写入
预定目的地
您是否尝试关闭文件写入程序和CsvWriter?尝试使用Try with resource不确定,但可能您必须刷新并关闭writerGood解释!谢谢@StephanHogenboom:)我必须说javadocs对任何事情都有答案,只要我们知道如何正确阅读它!:P
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?
}
}