我使用这个简单的代码将一些字符串写入名为“example.csv”的文件,但每次运行程序时,它都会覆盖文件中的现有数据。有没有办法将文字附加到它?
void setup(){
PrintWriter output = createWriter ("example.csv");
output.println("a;b;c;this;that ");
output.flush();
output.close();
}
答案 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等中使用它,那么您将不得不破解它
如果您想建议对PrintWriter API(可能基于FileWriter)进行增强,可以在GitHub上的Processing's Issue页面上进行: