如何将文本附加到Processing中的csv / txt文件?

时间:2013-06-09 13:41:06

标签: java csv processing

我使用这个简单的代码将一些字符串写入名为“example.csv”的文件,但每次运行程序时,它都会覆盖文件中的现有数据。有没有办法将文字附加到它?

void setup(){
  PrintWriter output = createWriter ("example.csv");
  output.println("a;b;c;this;that ");
  output.flush();
  output.close();

}

3 个答案:

答案 0 :(得分:8)

import java.io.BufferedWriter;
import java.io.FileWriter;

String outFilename = "out.txt";

void setup(){
  // Write some text to the file
  for(int i=0; i<10; i++){
    appendTextToFile(outFilename, "Text " + i);
  } 
}

/**
 * Appends text to the end of a text file located in the data directory, 
 * creates the file if it does not exist.
 * Can be used for big files with lots of rows, 
 * existing lines will not be rewritten
 */
void appendTextToFile(String filename, String text){
  File f = new File(dataPath(filename));
  if(!f.exists()){
    createFile(f);
  }
  try {
    PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(f, true)));
    out.println(text);
    out.close();
  }catch (IOException e){
      e.printStackTrace();
  }
}

/**
 * Creates a new file including all subfolders
 */
void createFile(File f){
  File parentDir = f.getParentFile();
  try{
    parentDir.mkdirs(); 
    f.createNewFile();
  }catch(Exception e){
    e.printStackTrace();
  }
}    

答案 1 :(得分:0)

读入文件的数据,将新数据附加到该数据,并将附加的数据写回文件。遗憾的是,Processing没有真正的“附加”模式来编写文件。

答案 2 :(得分:0)

您必须使用FileWriter(纯Java(6或7))而不是Processing API中的PrintWriter。 FileWriter在它的构造函数中有第二个参数,它允许你设置一个布尔值来决定你是否会附加输出或覆盖它(true是要追加,false是要覆盖)。

文档在这里:http://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html 注意你也可以使用BufferedWriter,并在构造函数中传递一个FileWriter,如果它有帮助(但我不认为在你的情况下是必要的)。

示例:

try {
  FileWriter output = new FileWriter("example.csv",true); //the true will append the new data
  output.println("a;b;c;this;that ");
  output.flush();
  output.close();
}
catch(IOException e) {
  println("It Broke :/");
  e.printStackTrace();
}

如上所述,这将在PDE中运行 - 在Android中 - 但如果您需要在PJS,PyProcessing等中使用它,那么您将不得不破解它

  • 动态读取现有文件的长度并将其存储在ArrayList
  • 在ArrayList
  • 中添加一个新行
  • 使用ArrayList索引来控制当前正在编写的文件中的位置

如果您想建议对PrintWriter API(可能基于FileWriter)进行增强,可以在GitHub上的Processing's Issue页面上进行:

https://github.com/processing/processing/issues?state=open