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:
BufferedReaderfornisce il buffering per ilReaderavvolto. Ciò consente a un'applicazione di leggere i caratteri uno alla volta senza inutili sovraccarichi I / O.Un
BufferedReaderfornisce 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
BufferedReaderin un bloccofinally.Il codice all'interno del blocco
tryè praticamente identico a quello cheFileReaderse leggiamo direttamente daFileReader. In effetti, unBufferedReaderfunziona esattamente come ilReaderche 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.