80,351
社区成员
发帖
与我相关
我的任务
分享
package com.example.a0113_log;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.GregorianCalendar;
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 MainActivity2 extends AppCompatActivity {
//需要查找得文件根路径
private String rootPath="/sdcard/Download";
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);
List<File> listFile=getFileSort(rootPath);
//打印list
// for(int i=0;i<listFile.size();i++)
// {
// File tmpFile=listFile.get(i);
// String date=LongTime2DateFormat(tmpFile.lastModified(),"yyyy-MM-dd HH:mm:ss");
// Log.i(TAG,tmpFile.getName()+"|"+date);
// }
delete5days(listFile);
}
/**
* 删除超过5天的文件
* @return
*/
public void delete5days(List<File> fileList){
//获取文件的时间戳
// List<File> srcFile=getFileSort(rootPath);
// 筛选出最近五天的文件:
// 时间差=目标文件时间-当前系统时间的绝对值
// 五天:day*hour*minute*second*mmcond
long fiveDayTime=30*24*60*60*1000; //这里为何是负数?
long currentTime=System.currentTimeMillis();
for(int i=0;i<fileList.size();i++)
{
long lastTime=fileList.get(i).lastModified();
long diffenTime=currentTime-lastTime;
if(diffenTime>fiveDayTime)
{
Log.i(TAG,"delet==>"+fileList.get(i).getName());
}
}
}
/**
*
* @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;
}
}
//获取文件的时间戳
// List<File> srcFile=getFileSort(rootPath);
// 筛选出最近五天的文件:
// 时间差=目标文件时间-当前系统时间的绝对值
// 五天:day*hour*minute*second*mmcond
long fiveDayTime=30*24*60*60*1000; //这里为何是负数?
long currentTime=System.currentTimeMillis();
for(int i=0;i<fileList.size();i++)
{
long lastTime=fileList.get(i).lastModified();
long diffenTime=currentTime-lastTime;
if(diffenTime>fiveDayTime)
{
Log.i(TAG,"delet==>"+fileList.get(i).getName());
}
}
}