Java Language
Läsare och författare
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:
En
BufferedReader
tillhandahåller buffring för den inslagnaReader
. Detta tillåter en applikation att läsa tecken en åt gången utan onödig I / O-omkostnader.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:
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 ettfinally
block.Koden inuti
try
är praktiskt taget identisk med vad vi skulle använda om vi läser direkt frånFileReader
. I självaBufferedReader
fungerar enBufferedReader
precis somReader
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.