如何用File.deleteRecursively()删除文件夹内容而非文件夹本身
仅删除文件夹内容保留文件夹本身的实现方法
核心思路是遍历目标文件夹(这里是Pictures)下的所有文件和子文件夹,逐个删除其中的内容及子文件夹本身,但跳过目标文件夹本身。以下是几种主流编程语言的实现方式:
Java 实现
import java.io.File; public class ClearPicturesFolder { public static void main(String[] args) { File picturesFolder = new File("Pictures"); // 先确认目标文件夹存在且是目录 if (picturesFolder.exists() && picturesFolder.isDirectory()) { File[] folderContents = picturesFolder.listFiles(); if (folderContents != null) { for (File content : folderContents) { deleteItem(content); } } } } // 递归删除文件或文件夹 private static void deleteItem(File item) { if (item.isDirectory()) { File[] children = item.listFiles(); if (children != null) { for (File child : children) { deleteItem(child); } } } item.delete(); } }
这段代码会遍历Pictures下的所有子项,先递归删除子文件夹里的所有内容,再删除子文件夹本身,最终只留下空的Pictures文件夹。
Kotlin 实现
Kotlin提供了更简洁的文件遍历API:
import java.io.File fun main() { val picturesFolder = File("Pictures") if (picturesFolder.exists() && picturesFolder.isDirectory) { // 从最底层文件开始遍历,避免先删父文件夹导致的问题 picturesFolder.walkBottomUp() .filter { it != picturesFolder } // 跳过目标文件夹本身 .forEach { it.deleteRecursively() } } }
walkBottomUp()会从最深层的文件/文件夹开始处理,确保子内容被彻底删除,最后过滤掉Pictures文件夹,只删除其内部所有内容。
Python 实现
方式一:使用os模块
import os import shutil def clear_folder(folder_path): if not os.path.isdir(folder_path): return # 遍历文件夹内所有项目 for item_name in os.listdir(folder_path): item_path = os.path.join(folder_path, item_name) if os.path.isfile(item_path) or os.path.islink(item_path): os.unlink(item_path) # 删除文件或链接 elif os.path.isdir(item_path): shutil.rmtree(item_path) # 递归删除子文件夹及其内容 # 调用方法清理Pictures文件夹 clear_folder("Pictures")
方式二:使用pathlib(Python 3.4+推荐)
from pathlib import Path import shutil pictures_folder = Path("Pictures") if pictures_folder.is_dir(): for item in pictures_folder.iterdir(): if item.is_file() or item.is_symlink(): item.unlink() elif item.is_dir(): shutil.rmtree(item)
两种方式都能实现只删除Pictures内部的所有文件和子文件夹,保留空的Pictures文件夹。
内容的提问来源于stack exchange,提问作者Arik6
相关产品推荐
相关产品推荐

