"Olá, amigo! Ontem Rishi falou sobre FileInputStream e FileOutputStream . E hoje vou falar sobre as classes FileReader e FileWriter ."
Como você provavelmente já adivinhou, todas essas classes são adaptadores entre o objeto File e as «interfaces» InputStream , OutputStream , Reader e Writer .
"Eles são semelhantes aos adaptadores entre File e Reader/Writer, mas você só precisa passar um objeto String para o construtor, não um File!"
"Na verdade, eles têm vários construtores. Existem construtores para objetos File e String. Se você passar um objeto String para o construtor, o construtor criará silenciosamente um objeto File usando o caminho de arquivo obtido do objeto String passado."
Isso é por conveniência. Os criadores de Java pegaram os casos de uso mais frequentes para essas classes e escreveram construtores para todos eles. Isso é muito conveniente, você não acha?
"Ah, sim. Conveniente. Concordo. Mas por que então tenho que escrever constantemente:"
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
"Por que eles não adicionaram este caso de uso?"
"A questão aqui é que um programa Java típico não funciona com o console. Na verdade, você quase nunca lê nada dele. Mesmo com um servidor web, servidor de aplicativos ou algum outro sistema complicado."
Mas temos PrintStream para enviar dados e texto para o console. Porque esses "aplicativos de servidor" geralmente usam o console para exibir seu status, erros e todos os tipos de outras informações.
"Entendi. E você também pode copiar um arquivo usando FileReader e FileWriter?"
"Sim, se for um arquivo de texto (ou seja, consiste em caracteres). Aqui está um exemplo:"
public static void main(String[] args) throws Exception
{
FileReader reader = new FileReader("c:/data.txt");
FileWriter writer = new FileWriter("c:/result.txt");
while (reader.ready()) //as long as there are unread bytes in the input stream
{
int data = reader.read(); //Read one character (the char will be widened to an int)
writer.write(data); //Write one character (the int will be truncated/narrowed to a char)
}
//Close the streams after we done using them
reader.close();
writer.close();
}
"Quase nenhuma diferença."
"Sim, as diferenças são mínimas."