Java Language
Czytelnicy i pisarze
Szukaj…
Wprowadzenie
Czytelnicy i pisarze oraz odpowiadające im podklasy zapewniają proste operacje we / wy dla danych tekstowych / znakowych.
BufferedReader
Wprowadzenie
Klasa BufferedReader
to opakowanie dla innych klas Reader
, które służy dwóm głównym celom:
BufferedReader
zapewnia buforowanie owiniętegoReader
. Pozwala to aplikacji na odczytywanie znaków pojedynczo, bez zbędnych narzutów we / wy.BufferedReader
zapewnia funkcjonalność odczytu tekstu linii na raz.
Podstawy korzystania z BufferedReader
Normalny wzorzec korzystania z BufferedReader
jest następujący. Najpierw otrzymasz Reader
, z którego chcesz odczytać postacie. Następnie utwórz instancję BufferedReader
która otacza Reader
. Następnie czytasz dane postaci. Na koniec BufferedReader
który zamyka zawinięty `Reader. Na przykład:
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);
}
Możesz zastosować ten wzór do dowolnego Reader
Uwagi:
Użyliśmy środowiska Java 7 (lub nowszego) try-with-resources, aby zapewnić, że podstawowy czytnik jest zawsze zamknięty. Pozwala to uniknąć potencjalnego wycieku zasobów. We wcześniejszych wersjach Javy jawnie
BufferedReader
wfinally
.Kod w bloku
try
jest praktycznie identyczny z tym, którego moglibyśmy użyć, gdybyśmy czytali bezpośrednio zFileReader
. W rzeczywistościBufferedReader
działa dokładnie tak, jak zachowywałby sięBufferedReader
przez niegoReader
. Różnica polega na tym, że ta wersja jest znacznie wydajniejsza.
Rozmiar bufora BufferedReader
Metoda BufferedReader.readLine ()
Przykład: wczytywanie wszystkich wierszy pliku do listy
Odbywa się to poprzez umieszczenie każdej linii w pliku i dodanie jej do List<String>
. Lista jest następnie zwracana:
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 zapewnia bardziej zwięzły sposób na zrobienie tego za pomocą metody 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();
}
Przykład StringWriter
Klasa Java StringWriter to strumień znaków, który zbiera dane wyjściowe z bufora ciągów, których można użyć do skonstruowania ciągu.
Klasa StringWriter rozszerza klasę Writer.
W klasie StringWriter zasoby systemowe, takie jak gniazda sieciowe i pliki, nie są używane, dlatego zamknięcie StringWriter nie jest konieczne.
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();
}
}
Powyższy przykład pomaga nam poznać prosty przykład StringWriter używającego BufferedReader do odczytu danych pliku ze strumienia.