Eu quero excluir todos os arquivos dentro do diretório ABC.
Quando tentei, FileUtils.deleteDirectory(new File("C:/test/ABC/"));
ele também exclui a pasta ABC.
Existe uma solução de um liner onde eu possa excluir arquivos dentro do diretório, mas não no diretório?
java
file-io
apache-commons-io
Fahim Parkar
fonte
fonte
rm -rf directory; mkdir directory
era mais rápido que o usoFileUtils.cleanDirectory
.Respostas:
Existe esse método disponível no mesmo arquivo. Isso também exclui recursivamente todas as subpastas e arquivos abaixo delas.
Documentos:
org.apache.commons.io.FileUtils.cleanDirectory
fonte
rm -rf directory
era muito mais eficiente do que usarFileUtils.cleanDirectory
.Você quer dizer como?
Isso excluirá apenas arquivos, não diretórios.
fonte
for(File file: dir.listFiles())
é provavelmente quis dizer como ....for (File file : new java.io.File("C:\\DeleteMeFolder").listFiles())
...A resposta de Peter Lawrey é ótima porque é simples e não depende de nada de especial, e é dessa maneira que você deve fazer. Se você precisar de algo que remova subdiretórios e seu conteúdo, use a recursão:
Para poupar subdiretórios e seu conteúdo (parte da sua pergunta), modifique da seguinte maneira:
Ou, já que você queria uma solução de uma linha:
Usar uma biblioteca externa para uma tarefa tão trivial não é uma boa idéia, a menos que você precise dessa biblioteca para outra coisa, nesse caso, é preferível usar o código existente. Você parece estar usando a biblioteca Apache de qualquer maneira, então use seu
FileUtils.cleanDirectory()
método.fonte
Java 8 Stream
Isso exclui apenas arquivos do ABC (os subdiretórios são intocados):
Isso exclui apenas arquivos do ABC (e subdiretórios):
^ Esta versão requer manipulação do IOException
fonte
Ou, para usar isso no Java 8:
É uma pena que o tratamento de exceções seja tão volumoso, caso contrário, seria uma linha única ...
fonte
fonte
Outra solução Java 8 Stream para excluir todo o conteúdo de uma pasta, incluindo os subdiretórios, mas não a própria pasta.
Uso:
e o código:
O problema com todas as soluções de fluxo que envolvem Files.walk ou Files.delete é que esses métodos lançam IOException, o que é difícil de tratar nos fluxos.
Tentei criar uma solução o mais concisa possível.
fonte
Para excluir todos os arquivos do diretório, diga "C: \ Example"
fonte
rm -rf
teve muito mais desempenho do queFileUtils.cleanDirectory
.Não é uma solução de uma linha, mas após extensos testes comparativos, descobrimos que o uso
rm -rf
era várias vezes mais rápido que o usoFileUtils.cleanDirectory
.Obviamente, se você tiver um diretório pequeno ou simples, isso não importará, mas, no nosso caso, tínhamos vários gigabytes e subdiretórios profundamente aninhados, onde levaria mais de 10 minutos com
FileUtils.cleanDirectory
e apenas 1 minuto comrm -rf
.Aqui está nossa implementação Java áspera para fazer isso:
Vale a pena tentar se você estiver lidando com diretórios grandes ou complexos.
fonte
Se você deseja excluir todos os arquivos, remova
declaração funcionará.
fonte
Eu acho que isso funcionará (com base na resposta anterior do NonlinearFruit):
Felicidades!
fonte