Sovrascrivere una stringa in un file txt

di il
2 risposte

Sovrascrivere una stringa in un file txt

Scrivo una stringa in un file txt.. se il file non esiste lo creo e scrivo la stringa altrimenti se esiste già dovrei sovrascrivere il testo gia esistente con la nuova stringa. Invece di sovrascrivere ho pensato di cancellare il file txt se esiste e ricrearne uno nuovo. Ma a volte lo fa e a volte no, mi scrive la nuova stringa concatenando con il testo gia esistente... come mai? ecco il codice :
File filedir = new File("..\\datain\\filedatain.txt");

if(filedir.exists())
    filedir.delete();

                boolean createNewFile = filedir.createNewFile();
     FileOutputStream agg = new FileOutputStream(filedir,true);
                try (PrintWriter scr = new PrintWriter(agg)) {
                    scr.print(dir); //dir è la stringa da scrivere dichiarata e inizializzata in precedenza
                }
                        
       } catch (IOException ex) {  } 

2 Risposte

  • Re: Sovrascrivere una stringa in un file txt

    A quanto so io il file viene sovrascritto in automatico, non serve cancellarlo e poi crearne uno nuovo.

    Una possibile causa di errore per cui spesso il testo non viene visualizzato è che non richiami sul PrintWriter il metodo flush() e il metodo close().
    Prova ad aggiungere le due righe:
    
    scr.flush();
    scr.close();
    
    subito dopo aver usato il print.
  • Re: Sovrascrivere una stringa in un file txt

    Il secondo parametro che passi al costruttore di FIleOutputStream è un booleano che indica se lo stream deve essere in modalità "append" (= concatenazione) oppure no. Mettendo true gli stai dicendo di aggiungere il contenuto alla fine del file, che è esattamente l'opposto di quello che vuoi fare tu.
    L'intero programma potrebbe essere riscritto sfruttando il costrutto try-with-resources disponibile da Java 7, che fra l'altro previene il problema della chiusura dello stream (che può lanciare a sua volta una IOException):
    
    File file = new File("..\\datain\\filedatain.txt");
    try (FileWriter fw = new FileWriter(file)) {
    	fw.write(dir);
    } catch (IOException e) {
    	// ...
    }
    
Devi accedere o registrarti per scrivere nel forum
2 risposte