Por favor, olhe através do código abaixo:
// 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);
Qual é a diferença entre esses dois métodos?
Quando devemos usar PrintWriter em vez de BufferedWriter?
fonte
PrintWriter
fornece mais métodos (println
), mas a diferença mais importante (e preocupante) a ter em conta é que engole exceções .Você pode ligar
checkError
mais tarde para ver se ocorreu algum erro, mas normalmente você usariaPrintWriter
para coisas como escrever no console - ou em aplicativos "rápidos e sujos" onde você não quer ser incomodado por exceções (e onde confiabilidade de longo prazo não é um problema).Não sei por que os aspectos de "habilidades extras de formatação" e "não engula exceções" são agrupados na mesma classe - a formatação é obviamente útil em muitos lugares onde você não quer que as exceções sejam engolidas. Seria bom ver
BufferedWriter
obter as mesmas habilidades em algum momento ...fonte
PrintStream
é umOutputStream
.PrintWriter
é umWriter
.IOException
, em que todas as outras abstrações de IO (Reader
,Writer
etc) declaram que seus métodos lançamIOException
se algo der errado -PrintWriter
não.Conforme dito na resposta de TofuBeer, ambos têm suas especialidades. Para aproveitar ao máximo o PrintWriter (ou qualquer outro gravador), mas também usar a gravação em buffer, você pode envolver o BufferedWriter com o necessário como este:
fonte
PrinterWriter
já cria umBufferedWriter
.PrintWriter apenas expõe os métodos de impressão em qualquer gravador em modo de caractere.
BufferedWriter é mais eficiente do que, de acordo com seus métodos de buffer. E vem com um método newLine (), dependendo da plataforma do seu sistema, para manipular arquivos de texto corretamente.
O BufferedReader permite ler um texto de um arquivo, com bytes convertidos em caracteres. Permite a leitura linha a linha.
Não há PrintReader, você deve escolher outra implementação do Reader de acordo com o formato de sua entrada.
fonte
PrintWriter é o gravador mais avançado para gravar dados de caracteres em um arquivo.
A principal vantagem de PrintWriter sobre FileWriter e BufferedWriter é:
PrintWriter printwriter = new PrintWriter("blah.txt");
(ou)
Podemos escrever qualquer tipo de dados primitivos diretamente no arquivo (porque temos versões adicionais sobrecarregadas dos métodos PrintWriter, ou seja, print () e println ()).
printwriter.print(65); //65
bufferedwriter.write(65); //A
printwriter.println(true); //true
fonte
Em geral, um gravador envia sua saída imediatamente para o caractere subjacente ou fluxo de bytes. A menos que a saída de prompt seja necessária, é aconselhável envolver um BufferedWriter em torno de qualquer gravador cujas operações write () possam ser caras, como FileWriters e OutputStreamWriters. Por exemplo,
Nota: o conteúdo do texto nos blocos de código é automaticamente quebrado
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));
armazenará em buffer a saída do PrintWriter no arquivo. Sem armazenamento em buffer, cada invocação de um método print () faria com que os caracteres fossem convertidos em bytes que seriam gravados imediatamente no arquivo, o que pode ser muito ineficiente.
fonte
BufferedWriter - Grava texto em um fluxo de caracteres de saída, armazenando em buffer os caracteres de um fluxo de caracteres. PrintWriter - Imprime representações formatadas de objetos em um fluxo de saída de texto.
fonte
Acho que a razão por trás do uso de PrintWriter já foi mencionada acima, mas uma das razões importantes é você passar um objeto de arquivo diretamente para o construtor PrintWriter, o que torna mais fácil usá-lo.
fonte