Olá, recentemente fiz um post para tirar dúvidas sobre ler arquivos de .txt dentro do jTextArea.
Está funcionando normalmente, abre o arquivo completo e tudo mais… Porém o txt que estou tentando abrir é pesado chega ser por volta dos 4MB o arquivo de texto e demora uns 5 min para abrir o arquivo no jTxtArea.
Arquivo .txt para fazerem teste: https://drive.google.com/open?id=1y-NYklDUrILaYaRwz2I3_MHqVYqvIrad
A questão é, ele demora um pouco mesmo para carregar o arquivo ou estou fazendo isso errado? Vou postar o código rsrs
public void buscar(){
String texto="";
FileNameExtensionFilter fileNameExtensionFilter = new FileNameExtensionFilter(
"txt", "txt");
JFileChooser fc = new JFileChooser();
fc.setFileFilter(fileNameExtensionFilter);
fc.setDialogTitle("Escolha o arquivo");
int resposta = fc.showOpenDialog(null);
if(resposta == JFileChooser.APPROVE_OPTION){
File file = new File(fc.getSelectedFile().getAbsolutePath());
FileReader fis;
try {
fis = new FileReader(file);
caminho=file.toString();
jTextField1.setText(file.toString());
jTextField1.setEditable(false);
BufferedReader bis = new BufferedReader(fis);
while(bis.ready()){
//System.out.println(bis.readLine()+"\n");
texto=texto+bis.readLine()+"\n";
}
jTextArea1.setText(texto);
bis.close();
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
}
}
}
@rodriguesabner Olá Abner, a Thread vai permitir que o usuário continue mexendo sem travar a aplicação, porém o tempo para abrir o conteúdo no txtArea ainda é o mesmo
Achei que o textaArea ia sendo preenchido conforme era lido…
Sim, mas não diminui o tempo que demora para ser lido o arquivo, o problema está ai rsrs se tem alguma coisa que pode ser feita para melhorar o tempo de ler o arquivo, os arquivo são pesados 4MB por ai…
Isso é devido à excessiva alocação e desalocação de String
na linha abaixo:
texto=texto+bis.readLine()+"\n";
Faça assim:
public void buscar() {
FileNameExtensionFilter fileNameExtensionFilter = new FileNameExtensionFilter("txt", "txt");
JFileChooser fc = new JFileChooser();
fc.setFileFilter(fileNameExtensionFilter);
fc.setDialogTitle("Escolha o arquivo");
int resposta = fc.showOpenDialog(null);
if (resposta == JFileChooser.APPROVE_OPTION) {
File file = new File(fc.getSelectedFile().getAbsolutePath());
try {
caminho = file.getAbsolutePath();
jTextField1.setText(file.toString());
jTextField1.setEditable(false);
BufferedReader reader = new BufferedReader(new FileReader(file));
StringBuilder texto = new StringBuilder();
String linha = null;
while ((linha = reader.readLine()) != null) {
texto.append(linha).append("\n");
}
jTextArea1.setText(texto.toString());
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Se dessa forma continuar lento para a sua aplicação, então utilize esta forma:
public void buscar() {
FileNameExtensionFilter fileNameExtensionFilter = new FileNameExtensionFilter("txt", "txt");
JFileChooser fc = new JFileChooser();
fc.setFileFilter(fileNameExtensionFilter);
fc.setDialogTitle("Escolha o arquivo");
int resposta = fc.showOpenDialog(null);
if (resposta == JFileChooser.APPROVE_OPTION) {
File file = new File(fc.getSelectedFile().getAbsolutePath());
try {
caminho = file.getAbsolutePath();
jTextField1.setText(file.toString());
jTextField1.setEditable(false);
byte[] buffer = new byte[8192];
InputStream in = new FileInputStream(file);
ByteArrayOutputStream out = new ByteArrayOutputStream((int) file.length());
for (int lidos = -1; (lidos = in.read(buffer)) != -1; out.write(buffer, 0, lidos)) {} // for vazio mesmo :)
jTextArea1.setText(new String(out.toByteArray()));
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3 curtidas
Show de bola! O primeiro procedimento funcionou beleza. Obrigado @staroski!!!
2 curtidas