Problemas ao deletar um arquivo

Olá a todos. Estou me matando aqui faz um tempo tentando desvendar o porque do meu código abaixo não apagar um arquivo .txt:

try{ String usuario = (String)listaUsuarios.getSelectedValue(); File user = new File(System.getProperty("user.dir") + File.separator + "USUARIOS" + File.separator + usuario + ".txt"); System.out.println("Arquivo: " + user.toString()); if(user.exists()){ user.delete(); JOptionPane.showMessageDialog(null, "Usuário \"" + txtNomeUsuario.getText().toUpperCase() + "\" foi apagado com sucesso."); Log.registrarAcoes("Usuário \"" + txtNomeUsuario.getText().toUpperCase() + "\" foi apagado do sistema pelo Gerênciador de usuários."); } } catch(Exception e){ JOptionPane.showMessageDialog(null, "Erro ao apagar o usuário: " + e.getMessage()); Log.registrarAcoes("Erro ao apagar o usuario \"" + txtNomeUsuario.getText().toUpperCase() + "\": " + e.getMessage()); e.printStackTrace(); }

O pior é que nenhuma Exception é lançada, daí não tenho pra onde correr.

Na parte…

 File user = new File(System.getProperty("user.dir") + File.separator + "USUARIOS" + File.separator + usuario + ".txt");

…quando ponho no lugar da variável “usuario” o nome do arquivo direto, este é apagado com sucesso, ou seja, minha aplicação tem permissão de exclusão.

Onde pode estar o erro?

Obrigado pela atenção.

O nome do usuário (“usuario”) contém espaços, quebras de linha, ou outras coisas estranhas?

Não não… é uma palavra apenas.

da uma debugada e ve o conteudo dessa variável então…

Já fiz isso também.

No System.out.println que coloquei antes do método exists(), ele me mostra exatamente o caminho do diretorio e o nome correto do arquivo que estou tentando deletar.

o método exists() está retornando true? ou seja, ele entra no if e joga aquela mensagem na tela ?

Sim… já debuguei aqui. Ele entra no if, executa o método delete(), exibe o JOptionPane e registra essa ação no Log do programa.

Isto pode ocorrer se o arquivo estiver em uso ( pelo seu aplicativo ou por outro aplicativo ). O método delete() retorna um boolean, verifica se ele retorna true ou false. Caso você não tenha condições de fechar o arquivo, é possível ainda usar o método deleteOnExit() que exclui o arquivo assim que a JVM finalizar.

aaaa, ele me retornou FALSE.

Consegui!!!

Eu tentava deletar o arquivo, com ele sendo usado por outro método.

Então apenas dei um close() no BufferedReader desse método. E agora consigo deletar sem problemas.

Agradeço aos colegas filipenf, marcosharbs, thingol e AJFilho pela ajuda.