java 删除文件-删除难以删除的文件
发布时间:2023-02-10 09:33 浏览次数:次 作者:佚名
Java 如何删除一个文件夹下的所有文件? 电源节点编辑器会告诉你。
1.使用FileUtils类
来自 Apache Commons IO 的 FileUtils 类提供了几个方便的文件操作实用程序。 您可以使用 FileUtils.cleanDirectory() 方法递归删除目录中的所有文件和子目录,而不删除目录本身。
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
File directory = new File("/path/to/dir");
FileUtils.cleanDirectory(directory);
}
}
要递归删除目录及其所有内容,可以使用 FileUtils.deleteDirectory() 方法。
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
File directory = new File("/path/to/dir");
FileUtils.deleteDirectory(directory);
}
}
或者,您可以使用 FileUtils.forceDelete() 方法删除目录和所有子目录。
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
File directory = new File("/path/to/dir");
FileUtils.forceDelete(directory);
}
}
2.使用File.delete()方法
File.delete() 方法删除由指定路径名表示的文件或目录。 有很多方法可以使用它有条件地删除目录中的文件和子目录。
例如,下面的解决方案只删除主目录中的文件java 删除文件java 删除文件,而保留所有子目录。
import java.io.File;
import java.util.Objects;
public class Main {
public static void main(String[] args) {
File directory = new File("/path/to/dir");
for (File file: Objects.requireNonNull(directory.listFiles())) {
if (!file.isDirectory()) {
file.delete();
}
}
}
}
如果您使用的是 Java 8 或更高版本,则可以使用:
import java.io.File;
import java.util.Arrays;
import java.util.Objects;
import java.util.function.Predicate;
public class Main {
public static void deleteDirectory(File directory) {
Arrays.stream(Objects.requireNonNull(directory.listFiles()))
.filter(Predicate.not(File::isDirectory))
.forEach(File::delete);
}
public static void main(String[] args) {
File directory = new File("/path/to/dir");
deleteDirectory(directory);
}
}
您可以轻松地扩展解决方案以递归地删除目录中的所有文件和子目录。 请注意,当且仅当目录为空时,您可以使用 File.delete() 删除目录。
import java.io.File;
import java.util.Objects;
public class Main {
public static void deleteDirectory(File directory) {
for (File file: Objects.requireNonNull(directory.listFiles())) {
if (file.isDirectory()) {
deleteDirectory(file);
} else {
file.delete();
}
}
}
public static void main(String[] args) {
File directory = new File("/path/to/dir");
deleteDirectory(directory);
}
}
这是使用 Stream API 的版本。 它使用 Files.walk() 方法并删除目录中的所有文件和子目录以及目录本身。
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Comparator;
public class Main {
public static void deleteDirectory(Path directory) throws IOException {
Files.walk(directory)
.sorted(Comparator.reverseOrder())
.map(Path::toFile)
.forEach(File::delete);
}
public static void main(String[] args) throws IOException {
Path directory = Path.of("/path/to/dir");
deleteDirectory(directory);
}
}
如果您需要从目录及其所有子目录中删除“仅文件”,您可以执行以下操作:
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
public class Main {
public static void deleteDirectory(File directory) throws IOException {
Files.walk(directory.toPath())
.filter(Files::isRegularFile)
.map(Path::toFile)
.forEach(File::delete);
}
public static void main(String[] args) throws IOException {
File directory = new File("/path/to/dir");
deleteDirectory(directory);
}
}
以上就是关于“Java删除文件夹下所有文件”的介绍,希望对大家的学习有所帮助。