Java 如何在处理过程中将文本附加到csv/txt文件?

Java 如何在处理过程中将文本附加到csv/txt文件?,java,csv,processing,Java,Csv,Processing,我使用这个简单的代码向名为“example.csv”的文件中写入一些字符串,但每次运行该程序时,它都会覆盖文件中的现有数据。有没有办法在上面加上文字 void setup(){ PrintWriter output = createWriter ("example.csv"); output.println("a;b;c;this;that "); output.flush(); output.close(); } 读入文件的数据,将新数据附加到其中,然后将附加的数据写回文件

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

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

}

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

import java.io.BufferedWriter;
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();
  }
}    
导入java.io.FileWriter; 字符串outFilename=“out.txt”; 无效设置(){ //向文件中写入一些文本
对于(inti=0;i您必须使用FileWriter(纯Java(6或7))而不是处理API中的PrintWriter。 FileWriter的构造函数中还有第二个参数,允许您设置一个布尔值来决定是追加输出还是覆盖输出(true表示追加,false表示覆盖)

文件如下: 注意,您也可以使用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问题页面上进行:


当然不会,我从来没有说过这是一个很好的解决方案,但如果您想留在处理语言中,这就是所有的解决方案。(当然,您可以在处理github页面上使用请求附加编写功能)如何做这些事情?查看如何做,以及如何提交问题。迈克,你肯定知道stackoverflow的标准答案格式是详细说明如何做一些事情,确切地说,一步一步,一行一行的代码。你的答案是一般性的,没有提供关于如何准确实现问题中所述目标的具体帮助。幸运的是这里还有其他答案。你的意思是,就像优秀的处理文档提供的所有代码示例一样?是的,我确信在别人问这个问题六年后,阅读这些代码是非常困难的。根据他们展示的代码,一个完全知道如何做这些事情的人。如果你不知道,你刚刚开始处理,然后作为Processing.js的前维护者,我强烈建议您阅读官方的处理教程和参考文档。这两部分都是您自己的,而且因为它们是优秀的资源。注意,这不再是处理,而是带有嵌入式处理的纯Java(也就是说,这在可以运行处理代码的环境中不起作用,但对Java一无所知)处理基于Java,此代码在处理IDE中运行良好!是的,当由Processing.js(或其他为not-in-a-JVM生成代码的处理编译器)编译时,它会崩溃,它具有完整的处理支持,但不在JVM中运行,因此不知道Java是什么=)是的,这不适用于Processing.js。但我认为没有内置解决方案可以编译为处理草图(Java)和Processing.js(Javascript)@Pwdr我可以问一下,如何添加文本并保持行数?这样新文本就可以按行添加,而不是按行添加?例如:(文本0、1、2)