Quero criar e excluir um diretório usando Java, mas não está funcionando.
File index = new File("/home/Work/Indexer1");
if (!index.exists()) {
index.mkdir();
} else {
index.delete();
if (!index.exists()) {
index.mkdir();
}
}
java
file-io
delete-directory
Mr.G
fonte
fonte
Respostas:
Java não é capaz de excluir pastas com dados. Você deve excluir todos os arquivos antes de excluir a pasta.
Use algo como:
Então você poderá excluir a pasta usando Não
index.delete()
testado!fonte
FileUtils.deleteDirectory
como disse @Francesco Menzani.if (!index.delete()) {...}
. Então, se o índice for um link simbólico, ele será excluído independentemente de parecer que tem conteúdo.entries
é nulo.Apenas uma linha.
Documentação aqui
fonte
Isso funciona e, embora pareça ineficiente pular o teste de diretório, não é: o teste acontece imediatamente em
listFiles()
.Atualizar, para evitar seguir links simbólicos:
fonte
Eu prefiro esta solução em java 8:
Deste site: http://www.baeldung.com/java-delete-directory
fonte
Files.walk()
, o que é explicitamente indicado nos documentos da API. Eu sei que se você não fechar o stream retornado por,Files.list()
por exemplo, você pode ficar sem alças e o programa irá travar. Consulte, por exemplo, stackoverflow.com/q/36990053/421049 e stackoverflow.com/q/26997240/421049 .No JDK 7 você pode usar
Files.walkFileTree()
eFiles.deleteIfExists()
deletar uma árvore de arquivos. (Exemplo: http://fahdshariff.blogspot.ru/2011/08/java-7-deleting-directory-by-walking.html )No JDK 6, uma maneira possível é usar FileUtils.deleteQuietly do Apache Commons, que removerá um arquivo, um diretório ou um diretório com arquivos e subdiretórios.
fonte
Usando o Apache Commons-IO, segue uma linha:
Este é (ligeiramente) mais desempenho do que
FileUtils.deleteDirectory
.fonte
Como mencionado, o Java não é capaz de excluir uma pasta que contém arquivos, portanto, primeiro exclua os arquivos e depois a pasta.
Aqui está um exemplo simples para fazer isso:
Ou:
fonte
Minha versão recursiva básica, trabalhando com versões mais antigas do JDK:
fonte
listFiles()
retorna nulo, em vez de chamarisDirectory()
.Esta é a melhor solução para
Java 7+
:fonte
Goiaba 21+ para o resgate. Use apenas se não houver links simbólicos apontando para fora do diretório para exclusão.
(Esta pergunta foi bem indexada pelo Google, então outras pessoas que usem Guava podem ficar felizes em encontrar esta resposta, mesmo que seja redundante com outras respostas em outros lugares.)
fonte
Gosto mais desta solução. Não usa biblioteca de terceiros, em vez disso usa NIO2 de Java 7.
fonte
Outra opção é usar o
org.springframework.util.FileSystemUtils
método relevante do Spring, que excluirá recursivamente todo o conteúdo do diretório.Isso fará o trabalho!
fonte
Nisso
você está ligando
depois de
Isso significa que você está criando o arquivo novamente após a exclusão de File.delete () retorna um valor booleano. Então, se você deseja verificar
System.out.println(index.delete());
se obtivertrue
, isso significa que o arquivo foi excluídoa partir dos comentários dados abaixo, a resposta atualizada é assim
fonte
Se você tiver subpastas, encontrará problemas com as respostas do Cemron. então você deve criar um método que funcione assim:
fonte
Você pode usar FileUtils.deleteDirectory . JAVA não pode excluir as pastas não vazias com File.delete () .
fonte
O diretório não pode simplesmente deletar se ele tiver os arquivos, então você pode precisar deletar os arquivos dentro primeiro e depois o diretório
fonte
Você pode fazer chamadas recursivas se houver subdiretórios
fonte
podemos usar a
spring-core
dependência;fonte
A maioria das respostas (mesmo recentes) que fazem referência a classes JDK dependem,
File.delete()
mas essa é uma API falha, pois a operação pode falhar silenciosamente.A
java.io.File.delete()
documentação do método afirma:Como substituto, você deve favorecer
Files.delete(Path p)
que lance umIOException
com uma mensagem de erro.O código real pode ser escrito como:
fonte
você pode tentar o seguinte
Se houver subpastas dentro da sua pasta, pode ser necessário excluí-las recursivamente.
fonte
fonte
Funciona como um encanto . Para pastas e arquivos. Salam :)
fonte
Remova-o de outra parte
fonte
Algumas dessas respostas parecem desnecessariamente longas:
Funciona para subdiretórios também.
fonte
Você pode usar esta função
fonte