Proszę przejrzeć poniższy kod:
// A.class
File file = new File("blah.txt");
FileWriter fileWriter = new FileWriter(file);
PrintWriter printWriter = new PrintWriter(fileWriter);
// B.class
File file = new File("blah.txt");
FileWriter fileWriter = new FileWriter(file);
BufferedWriter bWriter = new BufferedWriter(fileWriter);
Jaka jest różnica między tymi dwiema metodami?
Kiedy powinniśmy używać PrintWriter zamiast BufferedWriter?
źródło
PrintWriter
podaje więcej metod (println
), ale najważniejszą (i niepokojącą) różnicą, o której należy pamiętać, jest to, że połyka wyjątki .Możesz zadzwonić
checkError
później, aby sprawdzić, czy nie wystąpiły jakiekolwiek błędy, ale zazwyczaj używaszPrintWriter
do takich rzeczy, jak pisanie na konsoli - lub w „szybkich i brudnych” aplikacjach, w których nie chcesz, aby przeszkadzały Ci wyjątki (i gdzie długoterminowa niezawodność nie jest problemem).Nie jestem pewien, dlaczego aspekty „dodatkowych możliwości formatowania” i „nie połykaj wyjątków” są zawarte w tej samej klasie - formatowanie jest oczywiście przydatne w wielu miejscach, w których nie chcesz, aby wyjątki były połykane. Byłoby miło zobaczyć,
BufferedWriter
że w pewnym momencie te same umiejętności ...źródło
PrintStream
to plikOutputStream
.PrintWriter
jestWriter
.IOException
, że co drugi abstrakcja IO (Reader
,Writer
etc) deklaruje, że jej metody rzucaćIOException
, jeśli coś pójdzie nie tak -PrintWriter
nie.Jak powiedziano w odpowiedzi TofuBeera, obie mają swoje specjalności. Aby w pełni wykorzystać PrintWriter (lub dowolnego innego pisarza), ale także użyć buforowanego zapisu, możesz opakować BufferedWriter potrzebnym w następujący sposób:
PrintWriter writer = new PrintWriter( new BufferedWriter ( new FileWriter("somFile.txt")));
źródło
PrinterWriter
już tworzy plikBufferedWriter
.PrintWriter po prostu ujawnia metody drukowania na dowolnym programie Writer w trybie znakowym.
BufferedWriter jest bardziej wydajny niż, zgodnie z jego buforowanymi metodami. I jest wyposażony w metodę newLine (), w zależności od platformy systemowej, do poprawnego manipulowania plikami tekstowymi.
BufferedReader umożliwia odczytanie tekstu z pliku z bajtami przekonwertowanymi na znaki. Pozwala czytać wiersz po wierszu.
Nie ma PrintReadera, musisz wybrać inną implementację czytnika zgodnie z formatem wprowadzonych danych.
źródło
PrintWriter to najbardziej zaawansowany program Writer do zapisywania danych znaków w pliku.
Główną zaletą PrintWriter w porównaniu z FileWriter i BufferedWriter jest:
PrintWriter printwriter = new PrintWriter("blah.txt");
(lub)
FileWriter filewriter = new FileWriter("blah.txt"); PrintWriter printwiter = new PrintWriter(filewriter);
Możemy bezpośrednio do pliku zapisać dowolny typ danych Primitive (ponieważ mamy dodatkowe przeciążone wersje metod PrintWriter tj. Print () i println ()).
printwriter.print(65); //65
bufferedwriter.write(65); //A
printwriter.println(true); //true
źródło
Ogólnie rzecz biorąc, Writer wysyła swoje dane wyjściowe natychmiast do bazowego strumienia znaków lub bajtów. O ile nie jest wymagane szybkie wyjście, zaleca się zawinięcie BufferedWriter do dowolnego modułu Writer, którego operacje write () mogą być kosztowne, takiego jak FileWriters i OutputStreamWriters. Na przykład,
Uwaga: Treść tekstowa w blokach kodu jest automatycznie zawijana
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));
buforuje wyjście PrintWriter do pliku. Bez buforowania każde wywołanie metody print () powodowałoby konwertowanie znaków na bajty, które następnie byłyby natychmiast zapisywane do pliku, co może być bardzo nieefektywne.
źródło
BufferedWriter - zapisuje tekst w wyjściowym strumieniu znaków, buforując znaki ze strumienia znaków. PrintWriter - drukuje sformatowane reprezentacje obiektów do strumienia wyjściowego tekstu.
źródło
Myślę, że powód używania PrintWriter jest już wspomniany powyżej, ale jednym z ważnych powodów jest przekazanie obiektu pliku bezpośrednio do konstruktora PrintWriter, co ułatwia jego użycie.
File file=new File(“newfile.txt”); PrintWriter pw=new PrintWriter(file);
źródło