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:

  1. BufferedReader fornisce il buffering per il Reader avvolto. Ciò consente a un'applicazione di leggere i caratteri uno alla volta senza inutili sovraccarichi I / O.

  2. 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:

  1. 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 blocco finally .

  2. Il codice all'interno del blocco try è praticamente identico a quello che FileReader se leggiamo direttamente da FileReader . In effetti, un BufferedReader funziona esattamente come il Reader 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.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow