您的位置:首页 > 其它

服务未停止状态下清除指定文件内容

2016-10-09 09:17 253 查看
目标:在每次点击执行按钮的时候日志文件只记录当前这次执行的日志内容。

困惑:log4j日志记录是累计插入来记录日志的,也就是说每次生成的日志在原来日志的末端

1,使用文件删除方法只能在服务重启后才会执行

如:public static void deleteFile(File file) {
if (file.exists()) {// 判断文件是否存在
if (file.isFile()) {// 判断是否是文件
file.delete();// 删除文件
} else if (file.isDirectory()) {// 否则如果它是一个目录
File[] files = file.listFiles();// 声明目录下所有的文件 files[];
for (int i = 0; i < files.length; i++) {// 遍历目录下所有的文件
deleteFile(files[i]);// 把每个文件用这个方法进行迭代
}
file.delete();// 删除文件夹

}
}
}

该方法只有在重启tomcat后原来的文件才会被删除,后重新生成创建插入日志文件

2,既然日志文件在服务启动过程中无法删除后重新创建文件,那么io读取总归允许吧,就使用空格覆盖原来的内容的方式

思路:io的写入操作,先读取内容然后将内容设置为空

/**
* 参数替换文件内容法
* 使用空格替换原文件所有内容
* @param filePath C://perf//logs//perftest.jmx-49//thread.log
* @param replaceStr ""
*/
public static void cleanFileConten(String filePath,String replaceStr){
try{
BufferedWriter out = new BufferedWriter(new FileWriter(filePath));
String s = null;
out.write(replaceStr);
out.newLine();
out.flush();
out.close();
}catch(IOException e){
e.printStackTrace();
}

}
/**
* 空文件替换法
*/
public static void cleanFileConten2(){
try{
BufferedReader in = new BufferedReader(new FileReader("C://perf//logs//perftest.jmx-49//in.txt"));//已经存在一个空文件
BufferedWriter out = new BufferedWriter(new FileWriter("C://perf//logs//perftest.jmx-49//thread.log"));
String s = null;
while((s = in.readLine()) != null){
out.write(s);
out.newLine();
}
out.flush();
in.close();
out.close();
}catch(IOException e){
e.printStackTrace();
}
}
/**
* 直接空格替换法
*/
public static void cleanFileConten3(){
try{
BufferedWriter out = new BufferedWriter(new FileWriter("C://perf//logs//perftest.jmx-49//thread.log"));
String s = null;
out.write("");
out.newLine();
out.flush();
out.close();
}catch(IOException e){
e.printStackTrace();
}
}
public static void main(String[] args){
cleanFileConten("C://perf//logs//perftest.jmx-49/thread.log","");
//cleanFileConten3();
}

应用场景:

某个类中 

C:/perf/logs/perftest.jmx-49\thread.log

//File.separator输出不同的系统中斜杠的方向

        //在windows中斜杠的方向是向右斜的\\

        //在Linux  中斜杠的方向是向左斜的//

  String filePath =CONSTANTS.perfLogPath+threadName+File.separator+CONSTANTS.perfLogFileName;

String threadName = perfInfo.getJmxName()+"-"+perfInfo.getId();

  String filePath =CONSTANTS.perfLogPath+threadName+"\\"+CONSTANTS.perfLogFileName;
FileOperation.cleanFileConten(filePath, "");
Logger logger = ThreadLoggerFactory.getLogger(threadName); 
logger.info("开始执行任务:" + perfInfo);

结束
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: