java如何将结果保存到Excel文件或csv文件?
我使用以下代码提取一些数据并将其保存到CSV文件中。但现在的问题是,程序会将数据写入CSV文件,每当代码再次运行时,就会将其删除,旧结果将替换为新结果! 问题是,有没有办法保存结果并将新结果存储在新行中?如果是,那么怎么做
这是我的代码:
private void writeReport() {
BufferedWriter out = null;
try {
FileWriter fstream = new FileWriter("out.csv");
out = new BufferedWriter(fstream);
out.write("File Name;");
out.write("Total Lines of Code;");
out.write("Executable Lines;");
out.write("Lines of Comments;");
out.write("Trivial Lines;");
out.write("Empty Lines;");
out.write("Code Complexity;");
out.write("Number of Files;"); //to be changed to numver of files
out.write("Average File Complexity;"); //to be changed to averag file complexity
out.write("Comment Percentage;"); //total
out.write("Total Lines of Test Code;");
out.write("Total Comments in Tests;");
out.write("Total Trivial Lines in Tests;");
out.write("Total Empty Lines in Tests;");
out.write("Total Number of Test Files;");
out.write("Comment Presentage in Test;");
out.write(System.getProperty("line.separator"));
// for (int i = 0; i < newFiles.getNrOfFiles(); i++) {
out.write("test" + ";");
// out.write(newFiles.getParser(i).getSourceFile().getName()+ ";");
out.write(String.valueOf(newFiles.sumLinesOfCode()) + ";");
out.write(String.valueOf(newFiles.sumLinesOfStatements()) + ";");
out.write(String.valueOf(newFiles.sumLinesOfComments()) + ";");
out.write(String.valueOf(newFiles.sumTrivialLines()) + ";");
out.write(String.valueOf(newFiles.sumEmptyLines()) + ";");
out.write(String.valueOf(newFiles.sumComplexity())+ ";");
out.write(String.valueOf(newFiles.getNrOfFiles()) + ";");
out.write(String.valueOf(newFiles.sumAvgComplexity()) + ";");
out.write(String.valueOf((100 * newFiles.sumLinesOfComments()) / newFiles.sumLinesOfCode() + "%") + ";");
out.write(System.getProperty("line.separator"));
//Close the output stream
out.close();
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
// return;
}
}
# 1 楼答案
我会简单地使用http://opencsv.sourceforge.net/
使用Maven或Gradle:http://mvnrepository.com/artifact/com.opencsv/opencsv或下载并手动将其包含在项目中
# 2 楼答案
FileWriter类还有另一个构造函数,它采用一个布尔值来确定是否附加到现有文件
# 3 楼答案
看看这个图书馆
下面是一些示例代码(摘自org.apache.poi.hssf.dev.hssf测试类): 短rownum
读取或修改现有文件
读取文件也同样简单。要读入文件,请创建一个
org.apache.poi.poifs.Filesystem
的新实例,将一个打开的InputStream
传递给构造函数,例如XLS的FileInputStream
。构造一个新的org.apache.poi.hssf.usermodel.HSSFWorkbook
实例,将文件系统实例传递给构造函数。从那里,您可以通过评估器方法(workbook.getSheet(sheetNum)
,sheet.getRow(rownum), etc)
访问所有高级模型对象修改读入的文件很简单。您可以通过assessor方法检索对象,通过父对象的remove方法
(sheet.removeRow(hssfrow))
将其删除,并像创建新xls一样创建对象。修改完单元格后,只需像上面那样调用workbook.write(outputstream)
这方面的一个例子可以在^{} 中看到