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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
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().
1 2 3 4 5 6 |
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().
1 2 3 4 5 6 7 8 9 10 11 12 |
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.
1 2 3 4 5 6 |
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