Tarefas do nosso pseudo código:
1. Localizar o arquivo. (OK)
2. Ler o arquivo e transformar a mensagem do arquivo em uma String.
3. Colocar a mensagem lida do arquivo no programa como a mensagem do cartão.
Vamos trabalhar no passo dois. Já vimos como localizar o arquivo, agora temos que ler o conteúdo do arquivo. Na classe ReadFile vou adicionar o método ReadFile que vai chamar o método retornaFile().
ReadFile.java
import java.net.URL;
import java.io.File;
import java.io.FileReader;
public class ReadFile{
final String toXmas1 = "/txt/toXmas1.txt";
public void caminho(){
System.out.println(getClass().toString());
}
public void absoluteFilePath(){
System.out.println(getClass().getResource(toXmas1));
}
public URL absoluteFilePathURL(){
URL url = getClass().getResource(toXmas1);
return url;
}
public File retornaFile(){
URL url = getClass().getResource(toXmas1);
File file = new File(url.getPath());
return file;
}
public void readFile(){
try{
FileReader inputFile = new FileReader(retornaFile());
int aCh;
String mensagem = "";
while((aCh = inputFile.read()) != -1){
mensagem += (char) aCh;
}
System.out.println(mensagem);
}catch(Exception e){
System.out.println("ERRO readFile " + e.getMessage());
}
}
}
No método main do arquivo PrintXmasCard.java vou fazer a chamada do método readFile().
public static void main(String[] args){
//umCartao = new XmasCard();
//umCartao.imprimirCartao();
ReadFile r = new ReadFile();
r.readFile();
}
Se você executar não vai aparecer nada no console, porque não temos nenhuma mensagem no arquivo toXmas1.txt. Abra esse arquivo e escreva a mensagem: Feliz Natal e ano novo! Se você executar novamente o programa, agora sim irá aparecer a mensagem no console.
No método readFile() o laço de repetição while lê letra por letra e vai juntando todas na variável mensagem. A leitura dos caracteres é feita por meio do código Unicode das letras, por isso é utilizado a variável int aCh.
Vamos fazer um novo método no arquivo ReadFile.java para ler o arquivo toXmas1.txt. No arquivo ReadFile.java adicione as importações: import java.io.BufferedReader e import java.io.Reader.
Adicione também o método readMessage().
public String readMessage(){
String line = null;
try{
Reader targetReader = new FileReader(retornaFile());
BufferedReader bufferedReader = new BufferedReader(targetReader);
line = bufferedReader.readLine();
bufferedReader.close();
}catch(Exception e){
System.out.println("ERRO readMessage " + e.getMessage());
}
return line;
}
BufferedReader e FileReader
No método main do arquivo PrintXmasCard.java adicione:
ReadFile r = new ReadFile();
System.out.println(r.readMessage());
Execute o programa e você verá a mensagem aparecer no console.
O método readFile() do arquivo ReaFile.java pode ser utilizando para pequenos arquivos, mas se for um texto grande o ideal é utilizar o método readMessage().
A diferença que o BufferedReader é melhor que o FileReader, porque é feito uma leitura de uma grande quantidade de dados, que vai entregando aos poucos, conforme a demanda que o usuário vai requisitando como consequência acaba ajudando em tempo e performance. Mas quando for FileReader é acessado o arquivo a cada chamada read() que é realizada pelo usuário, sempre use o BufferedReader vale mais a pena!
https://respostas.guj.com.br/51634-diferenca-entre-filereader-e-bufferedreader
No arquivo XmasCard.java na variável mensagem que antes era um valor fixo, agora será atribuído o que está escrito no arquivo toXmas1.txt.
private void iniciarCartao(){
destinatario = JOptionPane.showInputDialog("Digite o nome do destinatário: ");
ReadFile r = new ReadFile();
mensagem = r.readMessage();
remetente = JOptionPane.showInputDialog("Digite o nome do remetente: ");
}
Execute o programa e verá que a mensagem é a mesma do arquivo toXmas1.txt.
Se quiser ver uma aula sobre o assunto, assine a lista.
Fonte: Learning Java with Games





Deixe um comentário