我想删除ABC目录下的所有文件。
当我尝试FileUtils.deleteDirectory(新文件(“C:/test/ABC/”));它还会删除文件夹ABC。
是否有一个一行解决方案,我可以删除目录内的文件,但不是目录?
我想删除ABC目录下的所有文件。
当我尝试FileUtils.deleteDirectory(新文件(“C:/test/ABC/”));它还会删除文件夹ABC。
是否有一个一行解决方案,我可以删除目录内的文件,但不是目录?
当前回答
或者在Java 8中使用这个:
try {
Files.newDirectoryStream( directory ).forEach( file -> {
try { Files.delete( file ); }
catch ( IOException e ) { throw new UncheckedIOException(e); }
} );
}
catch ( IOException e ) {
e.printStackTrace();
}
很遗憾异常处理是如此庞大,否则它将是一行程序…
其他回答
package com;
import java.io.File;
public class Delete {
public static void main(String[] args) {
String files;
File file = new File("D:\\del\\yc\\gh");
File[] listOfFiles = file.listFiles();
for (int i = 0; i < listOfFiles.length; i++)
{
if (listOfFiles[i].isFile())
{
files = listOfFiles[i].getName();
System.out.println(files);
if(!files.equalsIgnoreCase("Scan.pdf"))
{
boolean issuccess=new File(listOfFiles[i].toString()).delete();
System.err.println("Deletion Success "+issuccess);
}
}
}
}
}
如果你想删除所有文件删除
if(!files.equalsIgnoreCase("Scan.pdf"))
语句是可以的。
Peter Lawrey的回答很好,因为它很简单,不依赖于任何特殊的东西,这是你应该做的方式。如果你需要删除子目录和它们的内容,使用递归:
void purgeDirectory(File dir) {
for (File file: dir.listFiles()) {
if (file.isDirectory())
purgeDirectory(file);
file.delete();
}
}
为了节省子目录及其内容(你的问题的一部分),修改如下:
void purgeDirectoryButKeepSubDirectories(File dir) {
for (File file: dir.listFiles()) {
if (!file.isDirectory())
file.delete();
}
}
或者,既然你想要一个单行的解决方案:
for (File file: dir.listFiles())
if (!file.isDirectory())
file.delete();
使用外部库来完成如此琐碎的任务并不是一个好主意,除非您需要这个库来完成其他任务,在这种情况下,最好使用现有的代码。您似乎正在使用Apache库,因此使用它的FileUtils.cleanDirectory()方法。
Java 8流
这只会从ABC中删除文件(子目录不受影响):
Arrays.stream(new File("C:/test/ABC/").listFiles()).forEach(File::delete);
这只删除ABC(和子目录)中的文件:
Files.walk(Paths.get("C:/test/ABC/"))
.filter(Files::isRegularFile)
.map(Path::toFile)
.forEach(File::delete);
^这个版本需要处理IOException
import org.apache.commons.io.FileUtils;
FileUtils.cleanDirectory(directory);
在同一文件中有此方法可用。这也会递归地删除它们下面的所有子文件夹和文件。
文档:org.apache.commons.io.FileUtils.cleanDirectory
我认为这是可行的(基于非线性水果之前的答案):
Files.walk(Paths.get("C:/test/ABC/"))
.sorted(Comparator.reverseOrder())
.map(Path::toFile)
.filter(item -> !item.getPath().equals("C:/test/ABC/"))
.forEach(File::delete);
干杯!