1

我的问题是我填写了一个 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(); 

冲洗不起作用。

PS:我想追加,以便我可以在每个循环中写入数据。

4

2 回答 2

3

如果要清除“output/out.csv”,只需将参数更改为FileWriter即可false

FileWriter fw = new FileWriter("output/out.csv", false);

正如FileWriter 构造函数的文档中所说,第二个参数指定是否要追加。在您的情况下,如果您想清除数据,您可以简单地传递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();
    }
于 2013-04-16T14:04:00.523 回答
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();
}
于 2013-04-16T13:48:59.027 回答