Domanda

Si prega di guardare attraverso il codice qui sotto:

// A.class
File file = new File("blah.txt");
FileWriter fileWriter = new FileWriter(file);
PrintWriter printWriter = new PrintWriter(fileWriter);

// B.class
File file = new File("blah.txt");
FileWriter fileWriter = new FileWriter(file);
BufferedWriter bWriter = new BufferedWriter(fileWriter);

Qual è la differenza tra questi due metodi?

Quando dovremmo usare PrintWriter oltre BufferedWriter?

È stato utile?

Soluzione

Il riferimento API per BufferedWriter e PrintWriter dettaglio le differenze.

Il motivo principale per utilizzare il PrintWriter è quello di ottenere l'accesso ai metodi printXXX come println (). È in sostanza possibile utilizzare un PrintWriter per scrivere su un file, proprio come si usa System.out di scrivere alla console.

Una BufferedWriter è un modo efficace per scrivere in un file (o qualsiasi altra cosa), come sarà tamponare i personaggi in memoria Java prima (probabilmente, a seconda della realizzazione) scendendo a C per fare la scrittura al file.

Non esiste concetto come un "PrintReader"; la più vicina si arriva è probabilmente java.util.Scanner .

Altri suggerimenti

PrintWriter dà più metodi (println), ma il più importante (e preoccupante) differenza di essere a conoscenza è che inghiotte eccezioni .

È possibile chiamare checkError più tardi per vedere se si sono verificati errori, ma in genere si sarebbe utilizzare PrintWriter per cose come la scrittura sulla console - o in "Quick 'n sporche" applicazioni in cui non si desidera essere disturbati da eccezioni (e dove l'affidabilità a lungo termine non è un problema).

Non sono sicuro che il motivo per cui le "abilità di formattazione in più" e "non ingoiare eccezioni" aspetti vengono raggruppati nella stessa classe - formattazione è ovviamente utile in molti posti dove si non vogliono eccezioni essere ingerite. Sarebbe bello vedere BufferedWriter ottenere le stesse abilità ad un certo punto ...

Come detto in risposta di TofuBeer entrambi hanno le loro specialità. Per trarre il massimo vantaggio di PrintWriter (o qualsiasi altro scrittore), ma anche usare la scrittura tamponata si può avvolgere la BufferedWriter con quella necessaria in questo modo:

PrintWriter writer = new PrintWriter(
                         new BufferedWriter (
                             new FileWriter("somFile.txt")));

PrintWriter solo espone i metodi di stampa su qualsiasi scrittore in modalità carattere.

BufferedWriter è più efficiente, secondo le modalità buffer. E si tratta di un metodo UnaRigaVuota (), a seconda della vostra piattaforma di sistema, per manipolare correttamente i file di testo.

I permessi BufferedReader di leggere un testo da file, con byte convertiti in caratteri. Consente di leggere riga per riga.

Non c'è PrintReader, si deve scegliere un'altra implementazione Reader in base al formato del vostro input.

PrintWriter è il più avanzato Writer per scrivere i dati di carattere in un file.

Il principale vantaggio di PrintWriter sopra FileWriter e BufferedWriter è:

  1. PrintWriter può comunicare direttamente con il file, e può comunicare via qualche oggetto Writer anche.

PrintWriter printwriter = new PrintWriter("blah.txt");

(o)

FileWriter filewriter = new FileWriter("blah.txt");
PrintWriter printwiter = new PrintWriter(filewriter);
  1. Siamo in grado di scrivere qualsiasi tipo di dato primitivi direttamente nel file (perché abbiamo ulteriori versioni di overload dei metodi PrintWriter vale a dire, print () e println ()).

    printwriter.print(65); //65
    bufferedwriter.write(65); //A
    printwriter.println(true); //true

In generale, uno scrittore invia l'output immediatamente al flusso di caratteri o byte sottostante. A meno che non è necessaria l'uscita tempestiva, si consiglia di avvolgere un BufferedWriter intorno a qualsiasi scrittore la cui write () le operazioni possono essere costosi, come ad esempio FileWriters e OutputStreamWriters. Ad esempio,

Nota: il contenuto di testo nei blocchi di codice viene automaticamente andando a capo

PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));

sarà buffer di output del PrintWriter al file. Senza buffer, ogni invocazione di un metodo di stampa () causerebbe caratteri da convertire in byte che vengono scritti immediatamente al file, che può essere molto inefficiente.

BufferedWriter - Scrive testo a un flusso di caratteri di output, il buffering caratteri da un flusso di caratteri. PrintWriter - Stampe formattati rappresentazioni di oggetti a un flusso di output di testo.

Credo che la ragione che sta dietro all'uso PrintWriter è già accennato sopra, ma uno dei motivi è importante Sei un passa un oggetto file direttamente al costruttore PrintWriter che lo rende facile usarlo.

File file=new File(“newfile.txt”);
PrintWriter pw=new PrintWriter(file);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top