Sök…


Introduktion

Läsare och författare och deras respektive underklasser ger enkel I / O för text / teckenbaserad data.

BufferedReader

Introduktion

BufferedReader är ett omslag för andra Reader som tjänar två huvudändamål:

  1. En BufferedReader tillhandahåller buffring för den inslagna Reader . Detta tillåter en applikation att läsa tecken en åt gången utan onödig I / O-omkostnader.

  2. En BufferedReader tillhandahåller funktionalitet för att läsa text en rad åt gången.

Grunderna i att använda en BufferedReader

Det normala mönstret för att använda en BufferedReader är som följer. Först får du Reader som du vill läsa tecken från. Därefter instanserar du en BufferedReader som läser in Reader . Sedan läser du karaktärsdata. Slutligen stänger du BufferedReader som stänger den inslagna `Reader. Till exempel:

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);
}

Du kan tillämpa detta mönster på alla Reader

Anmärkningar:

  1. Vi har använt Java 7 (eller senare) försök med resurser för att säkerställa att den underliggande läsaren alltid är stängd. Detta undviker en potentiell resursläcka. I tidigare versioner av Java stänger du uttryckligen BufferedReader i ett finally block.

  2. Koden inuti try är praktiskt taget identisk med vad vi skulle använda om vi läser direkt från FileReader . I själva BufferedReader fungerar en BufferedReader precis som Reader som den lindar skulle bete sig. Skillnaden är att den här versionen är mycket effektivare.

BufferedReader-buffertstorlek

Metoden BufferedReader.readLine ()

Exempel: läsa alla rader i en fil till en lista

Detta görs genom att få varje rad i en fil och lägga till den i en List<String> . Listan returneras sedan:

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 ger ett mer kortfattat sätt att göra detta med metoden 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();
}

StringWriter-exempel

Java StringWriter-klassen är en teckenström som samlar ut output från strängbuffert, som kan användas för att konstruera en sträng.

StringWriter-klassen förlänger Writer-klassen.

I StringWriter-klassen används inte systemresurser som nätverksuttag och filer, därför är det inte nödvändigt att stänga StringWriter.

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();  
    }  
}

Ovanstående exempel hjälper oss att känna till ett enkelt exempel på StringWriter med hjälp av BufferedReader för att läsa fildata från strömmen.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow