bom dia a todos!!!
pessoal, seguinte…eu abro um jframe que me gera um txt . após isso, quando clico num botão, ele executa uma leitura num txt…beleza…aí, tenho um outro botão que apaga esse txt, que tbm tá funcionando certo…só que ele só funciona enquanto o método de leitura não for executado…se for executado, ele não faz nada…esse método fica aberto, impedindo o segundo, ou algo do genero???
bom, vamos lá… o conteudo do txt é “87”, quando executo o metodo de leitura a ação é a seguinte
[code] String teste = null;
try{
File file = new File(“sistema/info.txt”);
FileInputStream f = new FileInputStream(file);
Scanner Scan = new Scanner(f);
while(Scan.hasNext())
{
teste = Scan.next();
info.setText(""+teste);
}
}
catch(Exception e){
JOptionPane.showMessageDialog(rootPane, "erro!!não existe o tal arquivo!");
dispose();
}
[/code]
já o segundo método, que só funciona se o primeiro não executar é o seguinte
Txt T = new Txt();
if(T.DeletaArquivoTxt())
{
info.setText("");
JOptionPane.showMessageDialog(rootPane, "arquivo deletado");
dispose();
}
enfim, tem algo a ver isso do metodo que le o txt ficar pendurado???
como resolvo isso???
Obrigado a todos!!!
Horácio
Como o arquivo está em uso, ele não permite que você faça alterações, é como se estivesse protegido.
Uma outra coisa, cadê o bloco finally com os closed ? Você instanciou um FileInputStream mas não fechou ele após o uso, ele vai permanecer em memória até a JVM decidir que o mesmo deve ser removido.
eu fiz assim, aparentemente funcionou, fechei o scan, que era a parte que lia o texto, tá correto pensar que o scan é a ponta do processo de leitura, aí, fechando ela, também fecho as demais??? digo isso, porque parece que deu certo, ou é pelo fato do Scan segurar o arquivo impedindo que eu o deletasse???
o que é mais correto pensar nesse caso???
olha só como eu fiz:
[code] File file = new File(“sistema/info.txt”);
String teste = null;
try{
FileInputStream f = new FileInputStream(file);
Scanner Scan = new Scanner(f);
while(Scan.hasNext())
{
teste = Scan.next();
info.setText(""+teste);
}
Scan.close();
}
catch(Exception e){
JOptionPane.showMessageDialog(rootPane, "erro!!não existe o tal arquivo!");
dispose();
} [/code]
de resto, muito obrigado pela atenção, Nel!!! grande abraço!!!
ah, galera do forum…agradeço a vocês tbm pela constante ajuda sempre que posto alguma dúvida!! muito obrigado mesmo, pessoal!!!
Horácio
Evite dar nomes de variáveis que iniciem com letra maiúscula. Sobre o seu código, você deixou em aberto o FileInputStream. Funcionou, mas pode em algum momento não funcionar, pois o FileInputStream mantém o arquivo em aberto, sem a garantia de que o mesmo será fechado antes de você executar alguma ação, então, faça as seguintes modificações:
[code]File file = new File(“sistema/info.txt”);
String teste = null;
FileInputStream fis = null;
Scanner scan = null;
try{
fis = new FileInputStream(file);
scan = new Scanner(fis);
while(scan.hasNext()) {
teste = Scan.next();
info.setText(""+teste);
}
} catch(Exception e){
JOptionPane.showMessageDialog(rootPane, "erro!!não existe o tal arquivo!");
dispose();
} finally {
if (null != fis)
fis.close();
if (null != scan)
fis.close();
}
[/code]
Assim, garante que depois de toda a execução do seu método, serão fechados e evitando possíveis erros.