PrintWriter vs FileWriter in Java

PrintWriter e FileWriter in Java sono uguali e non importa quale usare? Finora ho usato entrambi perché i loro risultati sono gli stessi. C’è qualche caso speciale in cui ha senso preferire uno rispetto all’altro?

public static void main(String[] args) { File fpw = new File("printwriter.txt"); File fwp = new File("filewriter.txt"); try { PrintWriter pw = new PrintWriter(fpw); FileWriter fw = new FileWriter(fwp); pw.write("printwriter text\r\n"); fw.write("filewriter text\r\n"); pw.close(); fw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 

Secondo coderanch.com, se combiniamo le risposte otteniamo:

FileWriter è la rappresentazione dei caratteri di IO. Ciò significa che può essere usato per scrivere caratteri. Internamente FileWriter utilizza il set di caratteri predefinito del sistema operativo sottostante e converte i caratteri in byte e lo scrive sul disco.

PrintWriter e FileWriter.

Analogie

  1. Entrambi si estendono da Writer.
  2. Entrambe sono classi di rappresentazione dei caratteri, il che significa che lavorano con i caratteri e li convertono in byte usando il set di caratteri predefinito.

differenze

  1. FileWriter genera IOException in caso di errore IO, questa è un’eccezione controllata.
  2. Nessuno dei metodi di PrintWriter genera IOException, ma imposta un flag booleano che può essere ottenuto usando checkError ().
  3. PrintWriter dispone di un costruttore opzionale che è ansible utilizzare per abilitare il flush automatico quando vengono chiamati metodi specifici. Nessuna opzione del genere esiste in FileWriter.
  4. Quando scrive su file, FileWriter ha un costruttore opzionale che gli consente di accodare il file esistente quando viene chiamato il metodo “write ()”.

Differenza tra PrintStream e OutputStream: simile alla spiegazione di sopra, basta sostituire il carattere con il byte.

PrintWriter ha i seguenti metodi:

 close() flush() format() printf() print() println() write() 

e costruttori sono:

 File (as of Java 5) String (as of Java 5) OutputStream Writer 

mentre FileWriter ha i seguenti metodi:

 close() flush() write() 

e costruttori sono:

 File String 

Link: http://www.coderanch.com/t/418148/java-programmer-SCJP/certification/Information-PrintWriter-FileWriter

Entrambi usano internamente un FileOutputStream :

 public PrintWriter(File file) throws FileNotFoundException { this(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))), false); } public FileWriter(File file) throws IOException { super(new FileOutputStream(file)); } 

ma la principale differenza è che PrintWriter offre metodi speciali:

Stampa rappresentazioni formattate di oggetti in un stream di output di testo. Questa class implementa tutti i metodi di stampa disponibili in PrintStream. Non contiene metodi per scrivere byte non elaborati, per i quali un programma dovrebbe utilizzare flussi di byte non codificati.

A differenza della class PrintStream, se lo svuotamento automatico è abilitato sarà fatto solo quando viene invocato uno dei metodi println, printf o format, piuttosto che ogni volta che un carattere di nuova riga viene stampato. Questi metodi usano la nozione di separatore di riga propria della piattaforma piuttosto che il carattere di nuova riga.

A PrintWriter ha un diverso concetto di gestione degli errori. Devi chiamare checkError() invece di usare i blocchi try / catch.

PrintWriter non lancia IOException . È necessario chiamare il metodo checkError() per questo scopo.

Java.io.PrintWriter in Java5 + è consentito per un metodo / costruttore di convenienza che scrive sul file. Dal Javadoc;

Crea un nuovo PrintWriter, senza arresti linea automatici, con il file specificato. Questo costruttore di convenienza crea il necessario OutputStreamWriter intermedio, che codificherà i caratteri utilizzando il set di caratteri predefinito per questa istanza della macchina virtuale Java.

solo per fornire maggiori informazioni relative a FLUSH e Chiudi menthod relative a FileOutputStream

flush () — si limita a fare in modo che tutti i dati bufferizzati vengano scritti sul disco completamente svuotati e pronti a scrivere nuovamente allo stream (o al writer) in seguito.

close () —- svuota i dati e chiude qualsiasi handle di file, socket o quant’altro. Ora la connessione è andata persa e non è ansible scrivere nulla su outputStream.

Il fatto che java.io.FileWriter si basi sulla codifica dei caratteri predefinita della piattaforma rende piuttosto inutile per me. Non dovresti mai dare per scontato qualcosa sull’ambiente in cui verrà distribuita la tua app.