2012-04-01 12 views
17

Ich versuche, eine Methode zu schreiben, die eine "log.txt-Datei" erstellt, wenn eine Datei noch nicht existiert und dann in die Datei schreibt. Das Problem, auf das ich stoße, ist jedes Mal, wenn ich die Methode aufruft, überschreibt es das vorhandene Protokoll. Wie ändere ich die Methode, damit die Daten nicht überschrieben werden, sondern nur die Datei aktualisiert wird?In Textdatei schreiben, ohne in Java zu überschreiben

My Write-Datei Methode:

File log = new File("log.txt") 
    try{ 
    if(log.exists()==false){ 
      System.out.println("We had to make a new file."); 
      log.createNewFile(); 
    } 
    PrintWriter out = new PrintWriter(log); 
    out.append("******* " + timeStamp.toString() +"******* " + "\n"); 
    out.close(); 
    }catch(IOException e){ 
     System.out.println("COULD NOT LOG!!"); 
    } 
+4

PrintWriter pw = neuer PrintWriter (neuer FileWriter (New File(), true)); –

Antwort

34

Gerade PrintWriter out = new PrintWriter(log); ändern

PrintWriter out = new PrintWriter(new FileWriter(log, true)); 
+0

Vielen Dank! Wenn Sie erklären könnten, warum die Änderung der Parameter es behoben hat, würde ich es sehr schätzen. – rmp2150

+1

Aus dem Javadoc, FileWriter (Datei, boolean append). Der zweite Parameter gibt an, ob die Datei im Append-Modus geöffnet ist. –

+0

wird es nicht für mich arbeiten. Ich habe nur einen letzten Text in meiner Zieldatei :( – Kenji

9

stattdessen einen Filewriter verwenden.

FileWriter(File file, boolean append) 

das zweite Argument im Konstruktor sagt dem Filewriter jede gegebene Eingabe eher an die Datei anhängen, als es zu überschreiben.

hier einige Code für Ihr Beispiel ist:

File log = new File("log.txt") 

try{ 
    if(!log.exists()){ 
     System.out.println("We had to make a new file."); 
     log.createNewFile(); 
    } 

    FileWriter fileWriter = new FileWriter(log, true); 

    BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); 
    bufferedWriter.write("******* " + timeStamp.toString() +"******* " + "\n"); 
    bufferedWriter.close(); 

    System.out.println("Done"); 
} catch(IOException e) { 
    System.out.println("COULD NOT LOG!!"); 
} 
+0

Es ist nicht notwendig, die 'if (! Log.exists()) {log.createNewFile();}' -Block, als Schreiben in die Datei wird es erstellen, wenn es existiert nicht –

+2

Es ist nicht notwendig, da FileWriter versucht, die Datei inhärent zu erstellen, wenn sie nicht existiert.Wenn die Datei nicht erstellt werden kann, wird eine IOException ausgelöst.Ermöglicht das Hinzufügen einer zusätzlichen Überprüfung jedoch die Verständlichkeit und erstellt auch einen defensiven Punkt im Code, um die Fehlerbehandlung zu erweitern – thrau

2

Aus irgendeinem Grund keine der anderen Methoden arbeitete für mich ... Also habe ich versucht, diese und arbeitete. Hoffe, es hilft ..

JFileChooser c= new JFileChooser(); 
c.showOpenDialog(c); 
File write_file = c.getSelectedFile(); 
String Content = "Writing into file\n hi \n hello \n hola"; 
try 
{ 
    RandomAccessFile raf = new RandomAccessFile(write_file, "rw"); 
    long length = raf.length(); 
    System.out.println(length); 
    raf.setLength(length + 1); //+ (integer value) for spacing 
    raf.seek(raf.length()); 
    raf.writeBytes(Content); 
    raf.close(); 
} 
catch (Exception e) { 
    System.out.println(e); 
} 
2
JFileChooser c= new JFileChooser(); 
c.showOpenDialog(c); 
File write_file = c.getSelectedFile(); 
String Content = "put here the data to be wriiten"; 
try 
    { 
    FileWriter fw = new FileWriter(write_file); 
    BufferedWriter bw = new BufferedWriter(fw); 
    bw.append(Content); 
    bw.append("hiiiii"); 
    bw.close(); 
    fw.close(); 
    } 
catch(Exception e) 
    { 
    System.out.println(e); 
    `} 
+0

Dies ist der einfachste Weg –

0

versuchen dieses

public void writeFile(String arg1,String arg2) { 
 
\t \t try { 
 
\t \t \t if (!dir.exists()) { 
 

 
\t \t \t \t if (dir.mkdirs()) { 
 

 
\t \t \t \t \t Toast.makeText(getBaseContext(), "Directory created", 
 
\t \t \t \t \t \t \t Toast.LENGTH_SHORT).show(); 
 
\t \t \t \t } else { 
 
\t \t \t \t \t Toast.makeText(getBaseContext(), 
 
\t \t \t \t \t \t \t "Error writng file " + filename, Toast.LENGTH_LONG) 
 
\t \t \t \t \t \t \t .show(); 
 
\t \t \t \t } 
 
\t \t \t } 
 

 
\t \t \t else { 
 

 
\t \t \t \t File file = new File(dir, filename); 
 
\t \t \t \t if (!file.exists()) { 
 
\t \t \t \t \t file.createNewFile(); 
 
\t \t \t \t } 
 
\t \t \t \t 
 
\t \t \t \t FileWriter fileWritter = new FileWriter(file, true); 
 
\t \t \t \t BufferedWriter bufferWritter = new BufferedWriter(fileWritter); 
 
\t \t \t \t bufferWritter.write(arg1 + "\n"); 
 
\t \t \t \t bufferWritter.close(); 
 

 
      } catch (Exception e) { 
 
\t \t \t e.printStackTrace(); 
 
\t \t \t Toast.makeText(getBaseContext(), 
 
\t \t \t \t \t "Error writng file " + e.toString(), Toast.LENGTH_LONG) 
 
\t \t \t \t \t .show(); 
 
\t \t } 
 

 
\t }

1

Hier ist ein einfaches Beispiel dafür, wie es funktioniert, um best practice einen Versuch \ Fang zu setzen in es aber für den grundlegenden Gebrauch sollte dies den Trick tun. Dazu haben Sie einen String und einen Dateipfad und wenden sich somit an den FileWriter und den BufferedWriter. Dies wird "Hello World" (Datenvariable) schreiben und dann eine neue Zeile erstellen. Bei jeder Ausführung wird die Datenvariable zur nächsten Zeile hinzugefügt.

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileWriter; 


String Data = "Hello World"; 
File file = new File("C:/Users/stuff.txt"); 
FileWriter fw = new FileWriter(file,true); 
BufferedWriter bw = new BufferedWriter(fw); 
bw.write(Data); 
bw.newLine(); 
bw.close(); 
0

Sie können sogar verwenden, um zu bekommen, was Sie brauchen. So kann es gemacht werden,

File file = new File(Environment.getExternalStorageDirectory(), "abc.txt"); 
FileOutputStream fOut = new FileOutputStream(file, true); 
OutputStreamWriter osw = new OutputStreamWriter(fOut); 
osw.write("whatever you need to write"); 
osw.flush(); 
osw.close(); 
Verwandte Themen