我使用此代码删除所有文件:
File root = new File("root path");
File[] Files = root.listFiles();
if(Files != null) {
int j;
for(j = 0; j < Files.length; j++) {
System.out.println(Files[j].getAbsolutePath());
System.out.println(Files[j].delete());
}
}
它将删除 false,其中
Files[j]
是文件夹。
我想删除文件夹及其所有子文件。
我该如何修改这个?
另请检查此链接从 Android 的内部存储中删除文件夹?.
void deleteRecursive(File fileOrDirectory) {
if (fileOrDirectory.isDirectory())
for (File child : fileOrDirectory.listFiles())
deleteRecursive(child);
fileOrDirectory.delete();
}
最简单的方法是使用 Apache Commons IO 库中的 FileUtils.deleteDirectory。
File dir = new File("root path");
FileUtils.deleteDirectory(dir);
请记住,这也会删除包含的目录。
在 gradle 文件中添加此行以安装 Apache
compile 'org.apache.commons:commons-io:1.3.2'
File file = new File("C:\\A\\B");
String[] myFiles;
myFiles = file.list();
for (int i=0; i<myFiles.length; i++) {
File myFile = new File(file, myFiles[i]);
myFile.delete();
}
B.delete();// deleting directory.
你可以这样写方法:删除 dir 下的所有文件和子目录。如果所有删除成功,则返回 true。如果删除失败,该方法将停止尝试删除并返回 false。
public static boolean deleteDir(File dir) {
if (dir.isDirectory()) {
String[] children = dir.list();
for (int i=0; i<children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
// The directory is now empty so delete it
return dir.delete();
}
如果 storageDir 是目录
for(File tempFile : storageDir.listFiles()) {
tempFile.delete();
}
对于您的情况,这非常有效 http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html#cleanDirectory(java.io.File)
File dir = new File("dir_path");
if(dir.exists() && dir.isDirectory()) {
FileUtils.cleanDirectory(dir);
}
如果您想删除文件夹本身。 (它不必为空)。也可用于文件。
File dir = new File("dir_path");
if(dir.exists()) {
FileUtils.forceDelete(dir);
}
您可以这样检查:
for(j = 0; j < Files.length; j++) {
if(file.isDirectory()){
for(File f : file.listFiles()){
System.out.println(Files[j].getAbsolutePath());
System.out.println(Files[j].delete());
}
else {
System.out.println(Files[j].getAbsolutePath());
System.out.println(Files[j].delete());
}
}
您可以尝试此代码来删除文件和子文件
public void deleteFile(File f){
String[] flist=f.list();
for(int i=0;i<flist.length;i++){
System.out.println(" "+f.getAbsolutePath());
File temp=new File(f.getAbsolutePath()+"/"+flist[i]);
if(temp.isDirectory()){
deleteFile(temp) ;
temp.delete();
}else{
temp.delete();
}
从 Kotlin 1.5.31 开始,有一个 Kotlin 扩展方法,其工作原理如下:
val resultsOfDeleteOperation = File("<Full path to folder>").deleteRecursively()
根据文档:
删除此文件及其所有子文件。请注意,如果此操作失败,则可能发生了部分删除。 返回: 如果文件或目录被成功删除,则为 true,否则为 false。
//删除文件夹及其内容
public static void DeleteFolder(File folder)
{
try
{
FileUtils.deleteDirectory(folder);
} catch (Exception ex)
{
Log.e(" Failed delete folder: ", ex.getMessage());
}
}
// 仅删除文件夹内容
public static void DeleteFolderContents(File folder)
{
try
{
FileUtils.cleanDirectory(folder);
} catch (Exception ex)
{
Log.e(" Failed delete folder contents: ", ex.getMessage());
}
}
rm -rf
比 FileUtils.deleteDirectory
或自己递归删除目录性能更高。经过广泛的基准测试,我们发现使用
rm -rf
比使用
FileUtils.deleteDirectory
快数倍。 当然,如果您有一个小或简单的目录,那没关系,但在我们的例子中,我们有多个 GB 和深度嵌套的子目录,使用
FileUtils.deleteDirectory
需要 10 多分钟,而使用
rm -rf
只需 1 分钟.这是我们的粗略 Java 实现:
// Delete directory given and all subdirectories and files (i.e. recursively).
//
static public boolean deleteDirectory( File file ) throws IOException, InterruptedException {
if ( file.exists() ) {
String deleteCommand = "rm -rf " + file.getAbsolutePath();
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec( deleteCommand );
process.waitFor();
return true;
}
return false;
}
如果您正在处理大型或复杂的目录,值得尝试。
fun File.deleteDirectoryFiles(){
this.listFiles().forEach {
if(it.isDirectory){
it.deleteDirectoryFiles()
}else{
it.delete()
}
}
this.delete()
}
然后你就可以做
file.deleteDirectoryFiles()
if (imagesFolder.isDirectory())
{
String[] children = imagesFolder.list(); //Children=files+folders
for (int i = 0; i < children.length; i++)
{
File file=new File(imagesFolder, children[i]);
if(file.isDirectory())
{
String[] grandChildren = file.list(); //grandChildren=files in a folder
for (int j = 0; j < grandChildren.length; j++)
new File(file, grandChildren[j]).delete();
file.delete(); //Delete the folder as well
}
else
file.delete();
}
}
File mFile = new File(Environment.getExternalStorageDirectory() + "/folder");
try {
deleteFolder(mFile);
} catch (IOException e) {
Toast.makeText(getContext(), "Unable to delete folder", Toast.LENGTH_SHORT).show();
}
public void deleteFolder(File folder) throws IOException {
if (folder.isDirectory()) {
for (File ct : folder.listFiles()){
deleteFolder(ct);
}
}
if (!folder.delete()) {
throw new FileNotFoundException("Unable to delete: " + folder);
}
}
#2(根)
try {
Process p = Runtime.getRuntime().exec("su");
DataOutputStream outputStream = new DataOutputStream(p.getOutputStream());
outputStream.writeBytes("rm -Rf /system/file.txt\n");
outputStream.flush();
p.waitFor();
} catch (IOException | InterruptedException e) {
Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
String directoryPath = context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) + File.separator + context.getString(R.string.pdf_folder) + "/";
File file = new File("your dir"); //directoryPath
String[] files;
files = file.list();
for (int i=0; i<files.length; i++) {
File myFile = new File(file, files[i]);
myFile.delete();
}
public static void deleteFolders(File folder){
File[] subfiles;
if(folder.isFile()){folder.delete();}
else
if(folder.isDirectory()){
if(folder.listFiles().length>=1){
try{
subfiles=folder.listFiles();
for(int f = 0;f<subfiles.length;f++){
if(subfiles[f].isFile()){
deleteFolders(subfiles[f]);
}
if(subfiles[f].isDirectory()){
if(subfiles[f].listFiles().length>=1){
deleteFolders(subfiles[f]);
}else
deletes(subfiles[f]);
}
}
}
finally {
folder.delete();
deleteFolders(folder);
}
}
}
}
public static void deletes(File file)
{
if (file.exists())
{
if (file.isDirectory() &&
file.listFiles().length == 0)
{
file.delete();
}else
if (file.isFile())
{
file.delete();
}
else
{
if(file.isDirectory()&&file.listFiles().length>=1){
File[] files = file.listFiles();
if (files.length >= 1)
{
int i;
for (i = 0;i < files.length;i++)
{
files[i].delete();
}
file.delete();
}
}
}
}
希望这会有所帮助。