2013-06-09 1 views
4

Я использую этот простой код для записи нескольких строк в файл с именем «example.csv», но каждый раз, когда я запускаю программу, он перезаписывает существующие данные в файле. Есть ли способ добавить текст к нему?Как добавить текст в файл csv/txt в процессе обработки?

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

} 

ответ

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(); 
    } 
}  
+0

Обратите внимание, что это больше не обработка, а теперь простая Java с встроенной обработкой (т. Е. Это не будет работать в средах, которые могут запускать код обработки, t знать что-нибудь о Java) –

+1

Обработка основана на Java, этот код отлично работает в среде обработки IDE! – Pwdr

+0

Да, и он будет разбит при компиляции Processing.js (или других компиляторов обработки, которые генерируют код для не-в-JVM), который имеет полную поддержку обработки, но не работает в JVM, и поэтому имеет не знаю, что такое Java =) –

0

Читайте в данном файл, добавление новых данных в том, что и писать прилагаемые данные обратно в файл. К сожалению, у обработки нет истинного режима «добавления» для записи файлов.

+0

это не будет хорошей идеей, если файл слишком велик :( – sfewfed

+0

это, конечно, не будет, я не говорил, что это было отличное решение, но если вы хотите остаться внутри язык обработки, это все, что есть. (Конечно, вы можете включить функцию append-write на странице обработки github) –

0

Вы должны использовать FileWriter (чистый Java (6 или 7)), а не PrintWriter от обработки API. 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), вы можете сделать это на странице Issue Processing в на GitHub:

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

+0

@Fari no love? ;-) –

Смежные вопросы