6

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

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

}
4

3 回答 3

9
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();
  }
}    
于 2013-06-09T19:03:00.297 回答
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 的问题页面上这样做:

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

于 2013-06-10T15:26:19.230 回答
-1

读入文件的数据,将新数据附加到该文件中,然后将附加的数据写回文件。遗憾的是,Processing 没有用于文件写入的真正“附加”模式。

于 2013-06-09T14:39:18.020 回答