java目录文件超过指定大小则删除过时文件

标签: 删除文件
2018-03-08 阅读(301)

java中某文件夹超过指定大小,则删除过时或最近没用的临时文件,对空间缓存优化有一定的帮助。案例的思路可用于java中删除过时文件、优化缓存空间、删除文件夹过期的文件、在客户端请求图片缓存图片空间清理等。



目录中文件的排序

要想删除过期的文件,在文件夹中哪些文件过期了,那就是要对该文件夹的所有文件进行最近修改时间排序。

FileLastModifiedSort.java

package com.weizhixi.util;

import java.io.File;
import java.util.Comparator;

/**
 * 文件使用时间排序,根据文件的最后修改时间进行排序
 * 按最后修改时间由小到大顺序排序
 */
public class FileLastModifiedSort implements Comparator<File> {
    @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.java

package 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 < removeFactor; 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 < files.length; 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/user/index/article/id/80.html

分类:
点击(353) 阅读(301) 举报