我想删除ABC目录下的所有文件。
当我尝试FileUtils.deleteDirectory(新文件(“C:/test/ABC/”));它还会删除文件夹ABC。
是否有一个一行解决方案,我可以删除目录内的文件,但不是目录?
我想删除ABC目录下的所有文件。
当我尝试FileUtils.deleteDirectory(新文件(“C:/test/ABC/”));它还会删除文件夹ABC。
是否有一个一行解决方案,我可以删除目录内的文件,但不是目录?
当前回答
import org.apache.commons.io.FileUtils;
FileUtils.cleanDirectory(directory);
在同一文件中有此方法可用。这也会递归地删除它们下面的所有子文件夹和文件。
文档:org.apache.commons.io.FileUtils.cleanDirectory
其他回答
要删除目录中的所有文件,请输入“C:\Example”
File file = new File("C:\\Example");
String[] myFiles;
if (file.isDirectory()) {
myFiles = file.list();
for (int i = 0; i < myFiles.length; i++) {
File myFile = new File(file, myFiles[i]);
myFile.delete();
}
}
你是说像?
for(File file: dir.listFiles())
if (!file.isDirectory())
file.delete();
这将只删除文件,而不是目录。
我认为这是可行的(基于非线性水果之前的答案):
Files.walk(Paths.get("C:/test/ABC/"))
.sorted(Comparator.reverseOrder())
.map(Path::toFile)
.filter(item -> !item.getPath().equals("C:/test/ABC/"))
.forEach(File::delete);
干杯!
另一个Java 8 Stream解决方案删除文件夹的所有内容,包括子目录,但不删除文件夹本身。
用法:
Path folder = Paths.get("/tmp/folder");
CleanFolder.clean(folder);
代码是:
public interface CleanFolder {
static void clean(Path folder) throws IOException {
Function<Path, Stream<Path>> walk = p -> {
try { return Files.walk(p);
} catch (IOException e) {
return Stream.empty();
}};
Consumer<Path> delete = p -> {
try {
Files.delete(p);
} catch (IOException e) {
}
};
Files.list(folder)
.flatMap(walk)
.sorted(Comparator.reverseOrder())
.forEach(delete);
}
}
每个流解决方案都涉及文件的问题。walk或Files.delete这些方法会抛出IOException,这在流中处理起来很麻烦。
我试图创造一个更简洁的解决方案。
import org.apache.commons.io.FileUtils;
FileUtils.cleanDirectory(directory);
在同一文件中有此方法可用。这也会递归地删除它们下面的所有子文件夹和文件。
文档:org.apache.commons.io.FileUtils.cleanDirectory