android7.1怎么删除/data/logs下的文件夹和文件?

yhm2046 中级 2020-01-14 08:54:10
package com.example.a0113_log;

import android.app.Activity;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;

/**
* 2020.1.13 需求:筛选最近五天内的文件/文件夹,超过五天的文件删除
* 参考:https://blog.csdn.net/fujiakai/article/details/54087773
* https://blog.csdn.net/qq_41201881/article/details/81086535
*/
public class MainActivity3 extends AppCompatActivity {
//需要查找的文件根路径
// private String rootPath="/sdcard/Download";
private String rootPath="/data/logs/";
private String TAG = "wangp";
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE" };

/**
* 动态权限申请,android6.0以后读取sdcard必须申请
* @param activity
*/
public static void verifyStoragePermissions(Activity activity) {

try {
//检测是否有写的权限
int permission = ActivityCompat.checkSelfPermission(activity,
"android.permission.WRITE_EXTERNAL_STORAGE");
if (permission != PackageManager.PERMISSION_GRANTED) {
// 没有写的权限,去申请写的权限,会弹出对话框
ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE);
}
} catch (Exception e) {
e.printStackTrace();
}
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
verifyStoragePermissions(this);

// 1. 获取/data/logs/下所有文件夹名称和最后修改时间
// testFileDirOrName(rootPath);
// File tmpFile=new File(rootPath+"20-01-14-12-20-57/");
// long modifileTime=tmpFile.lastModified();
// Log.i(TAG,"modifiy time:"+modifileTime);
// 2.删除最后修改时间大于5天的文件夹
del5Days(rootPath);
}

/**
* 参考:http://www.voidcn.com/article/p-eeswpcan-bpm.html
* 删除超过五天的文件
* @param path
*/
private void del5Days(String path) {
long fiveDayTime=5L*24L*60L*60L*1000L; //注意不写L可能导致结果为负数
long currentTime=System.currentTimeMillis();
File dirFile = new File(path);
if (dirFile.exists()) {
File[] files = dirFile.listFiles();
if (files != null) {
for (File fileChildDir : files) {
//输出文件名或者文件夹名
// System.out.print(""+fileChildDir.getName());
if (fileChildDir.isDirectory()) {
long lastTime=fileChildDir.lastModified();
long diffenTime=currentTime-lastTime;
if(diffenTime>fiveDayTime) //大于五天
{
Log.i(TAG,"del=====>"+path+fileChildDir.getName());
try {
String tmpPath=path+fileChildDir.getName()+"/";
delFiles(tmpPath);
fileChildDir.delete();
Log.i(TAG,"delete success!");
} catch (Exception e) {
e.printStackTrace();
Log.i(TAG,"delete error"+e.toString());
}
}
}
if (fileChildDir.isFile()) {
// System.out.println(fileChildDir.getName()+" : 此为文件名");
}
}
}
}else{
System.out.println("你想查找的文件不存在");
return ;
}
}

/**
* 递归删除指定路径的文件
* @return
*/
public void delFiles(String filePath){
File file = new File(filePath);
if(!file.exists()){
return;
}
String[] list = file.list();
File temp = null;
String path = null;
for (String item:list) {
path = filePath + File.separator + item;
temp = new File(path);
if(temp.isFile()){
temp.delete();
continue;
}
if(temp.isDirectory()) {
delFiles(path);
new File(path).delete();
continue;
}
}
}

/**
*
* @param srcTime long类型的原始数据
* @param format yyyy-MM-dd HH:mm:ss
* @return String时间格式输出,失败则输出long转成得string
*/
public String LongTime2DateFormat(long srcTime,String format){
try {
Date d=new Date(srcTime);
String time=new SimpleDateFormat(format).format(d);
return time;
} catch (Exception e) {
e.printStackTrace();
Log.i("wan","LongTime2DateFormat error:"+e.toString());
return srcTime+"";
}
}

/**
*
* 获取目录下所有文件
*
* @param realpath
* @param files
* @return
*/
public static List<File> getFiles(String realpath, List<File> files) {
File realFile = new File(realpath);
if (realFile.isDirectory()) {
File[] subfiles = realFile.listFiles();
for (File file : subfiles) {
if (file.isDirectory()) {
getFiles(file.getAbsolutePath(), files);
} else {
files.add(file);
}
}
}
return files;
}

/**
* 获取目录下所有文件(按时间降序)
*
* @param path
* @return
*/
public static List<File> getFileSort(String path) {
List<File> list = getFiles(path, new ArrayList<File>());
if (list != null && list.size() > 0) {
Collections.sort(list, new Comparator<File>() {
public int compare(File file, File newFile) {
if (file.lastModified() < newFile.lastModified()) {
return 1;
} else if (file.lastModified() == newFile.lastModified()) {
return 0;
} else {
return -1;
}
}
});
}
return list;
}


}
...全文
351 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
yhm2046 中级 2020-01-14
  • 打赏
  • 举报
回复
这里打印删除了,但是adb命令看了文件夹还在是什么原因?
try {
                                String tmpPath=path+fileChildDir.getName()+"/";
                                delFiles(tmpPath);
                                fileChildDir.delete();
                                Log.i(TAG,"delete success!");
                            } catch (Exception e) {
                                e.printStackTrace();
                                Log.i(TAG,"delete error"+e.toString());
                            }

80,472

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧