安全删除文件夹的解决方法
问题描述
我正在盯着一个Android应用程序来整理和清洁我的手机,而我开始做的第一件事就是“清空文件夹清洁器”,我认为这很容易,实际上很容易,但是我想去再往前走...
例如,Ccleaner仅搜索空文件夹,这意味着如果一个文件夹中仅包含一个空文件夹,则将需要使用2次,因为包含空文件夹的文件夹将在干净,用我的代码检查一个文件夹中是否只有空文件夹,并且它适用于简单情况,例如其中有两个空文件夹的文件夹,但是当它更深时,它将无法正常工作。
我想知道一个文件夹是否为空,以及一个文件夹是否可以安全删除,因为它只有空的文件夹。
如果我的文件夹中有一个文件夹,则输出为:
Empty Folder: /storage/emulated/0/Folder1/Folder2
Folder safe to remove (only empty folders inside):/storage/emulated/0/Folder1
但是有3 ...
Empty Folder: /storage/emulated/0/Folder1/Folder2/Folder3
Folder safe to remove (only empty folders inside): /storage/emulated/0/Folder1/Folder2
忽略第一个(Folder1
)
这里是方法:
private void getAllEmptyFoldersOfDir(File directory) {
//Log.d(TAG, "Folder: " + directory.getAbsolutePath() + "\n");
int emptyFoldersCount = 0;
final File[] files = directory.listFiles();
if (files != null) {
for (File file : files) {
if (file != null) {
if (file.getName().equals("Android") && file.isDirectory()) {
//We need to exclude this folder
continue;
}
if (file.isDirectory()) {
if (file.listFiles().length > 0) {
getAllEmptyFoldersOfDir(file);
continue;
}
emptyFoldersCount++;
Log.d(TAG, "Empty Folder: " + file.getAbsolutePath() + "\n");
}
}
}
if (files.length == emptyFoldersCount)
Log.d(TAG, "Folder safe to remove (only empty folders inside): " + directory.getAbsolutePath() + "\n");
}
}
解决方法:
boolean getAllEmptyFoldersOfDir(File current){ if(current.isDirectory()){ File[] files = current.listFiles(); if(files.length == 0){ //There is no file in this folder - safe to delete System.out.println("Safe to delete - empty folder: " + current.getAbsolutePath()); return true; } else { int totalFolderCount = 0; int emptyFolderCount = 0; for(File f : files){ if(f.isDirectory()){ totalFolderCount++; if(getAllEmptyFoldersOfDir(f)){ //safe to delete emptyFolderCount++; } } } if(totalFolderCount == files.length && emptyFolderCount == totalFolderCount){ //only if all folders are safe to delete then this folder is also safe to delete System.out.println("Safe to delete - all subfolders are empty: " + current.getAbsolutePath()); return true; } } } return false; }
只要安全删除文件夹,此方法将返回true。因此,无论何时进行递归调用,首先都要扫描所有子文件夹并确认它们为空。仅当所有子文件夹都为空(emptyFolderCount == totalFolderCount
)时,文件夹本身才可以安全删除。
安全删除文件夹的解决方法内容分享到这里就结束了,如果你还有什么需要了解清楚的,可以来网站给小编留言。获取更多精彩内容,尽在爱站技术频道网站。