java中某文件夹超过指定大小,则删除过时或最近没用的临时文件,对空间缓存优化有一定的帮助。案例的思路可用于java中删除过时文件、优化缓存空间、删除文件夹过期的文件、在客户端请求图片缓存图片空间清理等。
目录中文件的排序
要想删除过期的文件,在文件夹中哪些文件过期了,那就是要对该文件夹的所有文件进行最近修改时间排序。
FileLastModifiedSort.javapackage com.weizhixi.util;
import java.io.File;
import java.util.Comparator;
/**
* 文件使用时间排序,根据文件的最后修改时间进行排序
* 按最后修改时间由小到大顺序排序
*/
public class FileLastModifiedSort implements Comparator {
@Override
public int compare(File f1, File f2) {
if (f1.lastModified() > f2.lastModified()) {
return 1;
} else if (f1.lastModified() == f2.lastModified()) {
return 0;
} else {
return -1;
}
}
}
超过大小则删除过时文件
对目录的遍历,对符合规定条件的过期文件,进行部分删除。
FileUtil.javapackage com.weizhixi.util;
import java.io.File;
import java.util.Arrays;
public class FileUtil {
/**
* 优化缓存空间
* 计算文件的总大小,判断是否超过20MB。
* 如果超过20MB,则删除40%最近没有被使用的文件
* @param dirPath 文件路径
*/
public static void removeSpaceCache(String dirPath) {
File dir = new File(dirPath);
File[] files = dir.listFiles();
if (files != null) {
//计算文件的总大小,判断是否超过20MB
if (filesSize(files) > 20 * 1024 * 1024) {
//删除40%最近没有被使用的文件
int removeFactor = (int)Math.ceil(0.4 * files.length);
//对文件按最近修改时间排序
Arrays.sort(files, new FileLastModifiedSort());
for (int i = 0; i
File tmp = files[i];
if (tmp.isFile()) {
files[i].delete();
}
}
}
}
}
/**
* 计算文件的总大小
* @param files
* @return
*/
public static int filesSize(File[] files) {
int dirSize = 0;
for (int i = 0; i
File tmp = files[i];
if (tmp.isFile()) {
dirSize += tmp.length();
}
}
return dirSize;
}
//测试
public static void main(String[] arg0){
removeSpaceCache("C:/Users/XQ/Desktop/11");
}
}
原创文章,转载请注明出处:https://www.weizhixi.com/article/80.html