java按文件夹下日志容量大小删除部分日志
来源:互联网 发布:2016网络知识竞赛 编辑:程序博客网 时间:2024/06/06 09:03
【需求】最近正在研发一款应用,属于车载定位系统的应用,运行在安卓终端设备上,安卓版本低了点,为2.3.4。
每当运行此应用,就会生成一个形如Log2016-05-20.txt 这样的文本文件,用来保存设备运行的状态信息。
关于日志有两种管理方法,一种是按日期定时删除日志。服务器通过UDP下达命令可以设置日志保留的时长,比如服务器向安卓终端设置保存日志时长为7天。而设备已连续运行了8天,自然就生成过8个这样的文本文件,但保留时长设为7天之后,就要删除7天之前的日志,即这里指的就是最早的那篇了,大家都能明白吧。
另一种管理方法为按日志保存的容量删除日志。比如当前日志有3份,分别为:Log2016-05-11.txt (日期最早,大小为5M), Log2016-05-12.txt (日期第二早,大小为6M), Log2016-0513.txt(最近日期,大小为2M) ,服务器设置日志容量大小为10MB,则每当应用初始化时,检查此文件夹下的这三个日志,前两个日志的和为:5+6=11 已经大于10M,则不计算后面的日志大小,就立即删除前两个日志,第三个日志得以保留。 如果日志大小分别为:5 ,6 , 12 ,9 。则按照需求,先删除5+6,再删除12,最后检查9<10. 最后一个得以保留。
所以,此需求就是这么变态。
于是在网上找了不少的方法与代码。自己也考虑了很多,结合网上的代码与自己的改写,有以下部分代码得以实现此功能(指的是第二种:按日志容量删除日志)
然后直接贴代码:
Tes.java
package cn.lls;
import java.io.File;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import cn.lls.utils.FileSort;
import cn.lls.utils.TypeConvertUtil;
public class Tes {
static int dayInt;
static long fileL;
static int no = 0;
static List<Long> list2;
static long totalSize = 0;
// 递归方法
public static void deepList(File file) {
if (file.isFile() || (0 == file.list().length)) {
return;
} else {
File[] files = file.listFiles();
files = FileSort.sort(files);
for (File f : files) {
if (f.isFile()) {
String fileName = f.getName();
if (!fileName.equals("Log" + ".txt")) {
String fileDay = fileName.substring(3, 13);
System.out.println(fileDay);
Date d = new Date();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
dayInt = (int) TypeConvertUtil.getIntervalDays(fileDay, df.format(d));
System.out.print("离今天有:" + dayInt + " 天了 ");
fileL = f.length();
list2 = new ArrayList<>();
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(dayInt, no);
list2.add(map.get(dayInt), fileL);
for (int i = 0; i < list2.size(); i++) {
totalSize += list2.get(i);
System.out.println("总大小:" + totalSize + " Bytes " + (totalSize / 1024 / 1024) + " MB");
if (totalSize > 12312) {
f.delete();
}
}
}
}
}
}
}
public static void main(String[] args) {
File f = new File("D:/aaa");
deepList(f);
}
}
FileSort.java
package cn.lls.utils;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class FileSort {
/**
* 将文件数组排序,目录放在上面,文件在下面 。最主要的目的是将文件倒序
*
* @param file
* @return
*/
public static File[] sort(File[] file) {
ArrayList<File> list = new ArrayList<File>();
for (File f : file) {
if (f.isDirectory()) {
list.add(f);
}
}
for (File f : file) {
if (f.isFile()) {
list.add(f);
}
}
// 将文件倒序
Collections.sort(list, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
if (o1.isDirectory() && o2.isFile())
return -1;
if (o1.isFile() && o2.isDirectory())
return 1;
return o2.getName().compareTo(o1.getName());
}
});
return list.toArray(new File[file.length]);
}
}
运行效果:
刚开始时模拟日志都保存到了一个目录下:(模拟时请删除此文件夹下的aaa.7z这个文件,否则会出错,我这个图里忘删除了)
然后 Ctrl + F11 运行此java程序:
可以看到程序里规定日志容量大小设定为12312 bytes。
所以从离现在最远的日期开始查找文件大小的和,如果和大于此设定值,则删除这几个文件。
目的达到了。花费了好多的时间去尝试。
源代码地址:
http://download.csdn.net/detail/yukimineryuu/9526677
- java按文件夹下日志容量大小删除部分日志
- java定时删除日志
- 删除sql server 大容量日志的方法
- 删除SQL Server 大容量日志的方法
- oracle检查归档日志大小和删除
- ORACLE中使用RAMA删除部分日志
- Linux 下删除日志文件
- java/android 统计文件夹大小及删除文件夹下所有文件和路径
- java/android 统计文件夹大小及删除文件夹下所有文件和路径
- java/android 统计文件夹大小及删除文件夹下所有文件和路径
- iis7下查看站点日志对应文件夹
- 删除日志~~
- 删除日志
- 删除日志
- 删除日志
- SharePoint 压缩数据库日志容量
- java面向对象学习日志(上半部分)
- Linux下产生日志并定期删除
- 剑指offer09--输入n后输出所以n位数
- 经典博弈
- hadoop fs.trash 详解
- Hibernate学习(1--8)
- 设置 xcode 上debug tab
- java按文件夹下日志容量大小删除部分日志
- 小技巧。
- 《学习OpenCV》课后习题解答6
- 利用注解初始化View对象
- javascript 闭包
- 字符编码笔记:ASCII,Unicode和UTF-8
- 保证线程的有序性,使用jion方法
- Yarn简单介绍及内存配置
- Redis 基本操作一