2012-04-01 15 views
17

Sto provando a scrivere un metodo che rende un "file log.txt" se non esiste già e quindi scrive nel file. Il problema che sto incontrando è ogni volta che chiamo il metodo, sovrascrive il registro esistente. Come cambio il metodo in modo che invece di sovrascrivere i dati si aggiorni semplicemente il file?Scrittura su file di testo senza sovrascrittura in Java

mia scrittura del file Metodo:

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 = new PrintWriter (nuova FileWriter (Nuovo file(), true)); –

risposta

34

Basta cambiare PrintWriter out = new PrintWriter(log); a

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

Grazie mille! Se potessi spiegare perché cambiare i parametri l'ho risolto, lo apprezzerei molto. – rmp2150

+1

Da javadoc, FileWriter (file file, append booleano). Il secondo parametro indica se il file viene aperto in modalità append. –

+0

non funzionerà per me. Ho solo un ultimo testo nel mio file di destinazione :( – Kenji

9

utilizzare un FileWriter invece.

il secondo argomento nel costruttore indica a FileWriter di aggiungere un dato input al file anziché sovrascriverlo.

Ecco il codice per il tuo esempio:

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

Non è necessario includere il blocco 'if (! Log.exists()) {log.createNewFile();}', poiché la scrittura sul file lo creerà se –

+2

Non è necessario, poiché FileWriter tenterà di creare il file intrinsecamente se non esiste Se il file non può essere creato, verrà generata una IOException Tuttavia, l'aggiunta di un controllo aggiuntivo aiuta a comprendere e crea anche un punto difensivo nel codice per estendere la gestione degli errori. – thrau

2

Per qualche ragione, nessuno degli altri metodi lavorato per me ... Così ho provato questo e ha funzionato. Speranza che aiuta ..

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

questo è il modo più semplice –

0

provare questo

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

Ecco un semplice esempio di come funziona, le migliori pratiche per mettere una prova \ cattura in ma per l'uso di base questo dovrebbe fare il trucco. Per questo hai un percorso di stringa e file e applicalo quindi a FileWriter e BufferedWriter. Questo scriverà "Hello World" (variabile Data) e quindi creerà una nuova riga. ogni volta che viene eseguito, aggiunge la variabile Data alla riga successiva.

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

Si può anche utilizzare FileOutputStream per ottenere quello che ti serve. Ecco come si può fare,

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();