我的问题是我填写了一个csv文件,但我想每次运行我的代码来清空csv然后写下新数据。
每次运行代码时,都会在FOR循环中从我的主体调用此方法...
public static void csv_output() throws Exception {
FileWriter fw = new FileWriter("output/out.csv", true);
//true refers to append
PrintWriter pw = new PrintWriter(fw, false);
//pw.flush();
//clears the Buffer
if (Auctionhouse.current_epoch == 1) {
pw.print("Epoch");
pw.print(",");
for (int j = 0; j < Run_process.total_Agents; j++) {
pw.print(Chromosome.chromosome.get(j).ID + "_Balance");
pw.print(",");
}
for (int k = 0; k < Stockhouse.total_stocks; k++) {
pw.print(Stockhouse.stockP.get(k).stock_Id);
pw.print(",");
}
}
pw.println();
pw.print(Auctionhouse.current_epoch);
pw.print(",");
for (int i = 0; i < Run_process.total_Agents; i++) {
String ag = Portfolio.Agent_balance.get(i) + "";
pw.print(ag);
pw.print(",");
}
for (int j = 0; j < Stockhouse.total_stocks; j++) {
String pr = Auctionhouse.total_prices.get(Auctionhouse.current_epoch - 1).get(j) + "";
pw.print(pr);
pw.print(",");
}
}
pw.flush();
pw.close();
fw.close();
Flush不起作用。
P.S:我想追加以便我可以在每个循环中写入数据。
答案 0 :(得分:2)
如果要清除“output / out.csv”,只需将FileWriter
的参数更改为false
即可。
FileWriter fw = new FileWriter("output/out.csv", false);
如FileWriter constructor的文件中所述,第二个参数指定是否要追加。在您的情况下,如果您想清除数据,您可以简单地传递false
,它将在文件的开头写入。您应该在应用程序启动时执行此代码。
修改强>
清除文件内容而不删除它。如果您实现此代码,则需要捕获IOexception
并可能创建一个函数来执行代码,但这应该这样做。
public static void clearCsv() throws Exception {
FileWriter fw = new FileWriter("output/out.csv", false);
PrintWriter pw = new PrintWriter(fw, false);
pw.flush();
pw.close();
fw.close();
}
答案 1 :(得分:1)
据我所知,在输入for循环之前,你想要一个空的“output / out.csv”文件。所以只需在程序启动时删除文件 - 如果存在。
File outFile = new File("output/out.csv");
// delete out file if it exists
if (outFile.exists()) {
System.out.println("Old out.csv file exists. Removing...);
outFile.delete();
}