Java Language
Lettori e scrittori
Ricerca…
introduzione
Lettori e Scrittori e le rispettive sottoclassi forniscono I / O semplice per i dati basati su testo / carattere.
BufferedReader
introduzione
La classe BufferedReader
è un wrapper per altre classi di Reader
che ha due scopi principali:
BufferedReader
fornisce il buffering per ilReader
avvolto. Ciò consente a un'applicazione di leggere i caratteri uno alla volta senza inutili sovraccarichi I / O.Un
BufferedReader
fornisce funzionalità per leggere il testo una riga alla volta.
Nozioni di base sull'utilizzo di BufferedReader
Il modello normale per l'utilizzo di BufferedReader
è il seguente. Innanzitutto, ottieni il Reader
cui vuoi leggere i caratteri. Successivamente si crea un'istanza di BufferedReader
Reader
che avvolge il Reader
. Quindi leggi i dati dei personaggi. Finalmente chiudi BufferedReader
che chiude il Reader `avvolto. Per esempio:
File someFile = new File(...);
int aCount = 0;
try (FileReader fr = new FileReader(someFile);
BufferedReader br = new BufferedReader(fr)) {
// Count the number of 'a' characters.
int ch;
while ((ch = br.read()) != -1) {
if (ch == 'a') {
aCount++;
}
}
System.out.println("There are " + aCount + " 'a' characters in " + someFile);
}
È possibile applicare questo modello a qualsiasi Reader
Gli appunti:
Abbiamo utilizzato Java 7 (o versioni successive) try-with-resources per garantire che il lettore sottostante sia sempre chiuso. Ciò evita una potenziale perdita di risorse. Nelle versioni precedenti di Java, si chiudeva esplicitamente
BufferedReader
in un bloccofinally
.Il codice all'interno del blocco
try
è praticamente identico a quello cheFileReader
se leggiamo direttamente daFileReader
. In effetti, unBufferedReader
funziona esattamente come ilReader
che si avvolge si comporterebbe. La differenza è che questa versione è molto più efficiente.
La dimensione del buffer BufferedReader
Il metodo BufferedReader.readLine ()
Esempio: lettura di tutte le righe di un file in una lista
Ciò avviene inserendo ogni riga in un file e aggiungendola in un List<String>
. L'elenco viene quindi restituito:
public List<String> getAllLines(String filename) throws IOException {
List<String> lines = new ArrayList<String>();
try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
String line = null;
while ((line = reader.readLine) != null) {
lines.add(line);
}
}
return lines;
}
Java 8 fornisce un modo più conciso per farlo usando il metodo lines()
:
public List<String> getAllLines(String filename) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
return br.lines().collect(Collectors.toList());
}
return Collections.empty();
}
Esempio di StringWriter
La classe Java StringWriter è un flusso di caratteri che raccoglie l'output dal buffer di stringa, che può essere utilizzato per costruire una stringa.
La classe StringWriter estende la classe Writer.
Nella classe StringWriter, le risorse di sistema come i socket di rete ei file non vengono utilizzati, pertanto la chiusura di StringWriter non è necessaria.
import java.io.*;
public class StringWriterDemo {
public static void main(String[] args) throws IOException {
char[] ary = new char[1024];
StringWriter writer = new StringWriter();
FileInputStream input = null;
BufferedReader buffer = null;
input = new FileInputStream("c://stringwriter.txt");
buffer = new BufferedReader(new InputStreamReader(input, "UTF-8"));
int x;
while ((x = buffer.read(ary)) != -1) {
writer.write(ary, 0, x);
}
System.out.println(writer.toString());
writer.close();
buffer.close();
}
}
L'esempio sopra riportato ci aiuta a conoscere un semplice esempio di StringWriter che utilizza BufferedReader per leggere i dati del file dallo stream.