我使用这个简单的代码将一些字符串写入名为“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.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();
}
}
您必须使用 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 的问题页面上这样做:
读入文件的数据,将新数据附加到该文件中,然后将附加的数据写回文件。遗憾的是,Processing 没有用于文件写入的真正“附加”模式。