Java ‘file.delete ()’ não está excluindo o arquivo especificado

Este é o momento que eu tenho que apagar o arquivo, mas não está funcionando. Eu pensei que pode ser problemas de permissão ou algo assim, mas não foi. O arquivo com o qual estou testando está vazio e existe, portanto não tenho certeza porque não o exclui.

UserInput.prompt("Enter name of file to delete"); String name = UserInput.readString(); File file = new File("\\Files\\" + name + ".txt"); file.delete(); 

Qualquer ajuda seria muito apreciada!

Agora tenho:

 File file = new File(catName + ".txt"); String path = file.getCanonicalPath(); File filePath = new File(path); filePath.delete(); 

Para tentar encontrar o caminho correto em tempo de execução, de modo que, se o programa for transferido para um computador diferente, ele ainda localizará o arquivo.

Certifique-se de descobrir seu diretório de trabalho atual e escreva seu caminho de arquivo relativo a ele.

Este código:

 File here = new File("."); System.out.println(here.getAbsolutePath()); 

… imprimirá esse diretório.

Além disso, não relacionado à sua pergunta, tente usar File.separator para permanecer independente do sistema operacional. As barras invertidas funcionam apenas no Windows.

O problema também pode ser devido a qualquer stream de saída que você tenha esquecido de fechar. No meu caso eu estava trabalhando com o arquivo antes do arquivo ser deletado. No entanto, em um lugar nas operações de arquivo, eu tinha esquecido de fechar um stream de saída que eu costumava gravar no arquivo que foi tentado excluir mais tarde.

Eu tenho o mesmo problema! então percebi que meu diretório não estava vazio. Eu encontrei a solução em outro segmento: não é capaz de excluir o diretório através de Java

 /** * Force deletion of directory * @param path * @return */ static public boolean deleteDirectory(File path) { if (path.exists()) { File[] files = path.listFiles(); for (int i = 0; i < files.length; i++) { if (files[i].isDirectory()) { deleteDirectory(files[i]); } else { files[i].delete(); } } } return (path.delete()); } 

Eu suspeito que o problema é que o caminho está incorreto. Tente isto:

 UserInput.prompt("Enter name of file to delete"); String name = UserInput.readString(); File file = new File("\\Files\\" + name + ".txt"); if (file.exists()) { file.delete(); } else { System.err.println( "I cannot find '" + file + "' ('" + file.getAbsolutePath() + "')"); } 

Se você quiser excluir o arquivo primeiro feche todas as conexões e streams. depois disso, apague o arquivo.

No meu caso, foi o close () que não estava sendo executado devido a uma exceção não tratada.

 void method() throws Exception { FileInputStream fis = new FileInputStream(fileName); parse(fis); fis.close(); } 

Suponha que a exceção esteja sendo lançada na análise (), que não é tratada nesse método e, portanto, o arquivo não está fechado, no caminho, o arquivo está sendo excluído e essa instrução de exclusão falha e não é excluída.

Então, em vez disso, eu tinha o código assim, então funcionou …

  try { parse(fis); } catch (Exception ex) { fis.close(); throw ex; } 

Java tão básico, que às vezes nos esquecemos.

Tente fechar todos os FileOutputStream/FileInputStream que você abriu anteriormente em outros methods e, em seguida, tente excluir, funcionou como um encanto.

Problema é que verifique o tempo que você fechou todos os streams ou não se abriu fechar os streams e excluir, renomear..etc o arquivo isso é trabalhado para mim

Eu cometi o erro de abrir um BufferedReader como:

 File f = new File("somefile.txt"); BufferedReader br = new BufferedReader(new FileReader(f)); 

… e é claro que não consegui executar o f.delete() porque coloquei o FileReader em vez de instanciar sua própria variável onde eu poderia explicitamente fechá-lo. Duh …

Uma vez eu codifiquei:

 File f = new File("somefile.txt"); FileReader fread = new FileReader(f); BufferedReader br = new BufferedReader(fread); 

Eu poderia emitir um br.close(); br=null; fread.close(); fread=null; br.close(); br=null; fread.close(); fread=null; e o f.delete() funcionou bem.