服务未停止状态下清除指定文件内容
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);
结束
困惑: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);
结束
相关文章推荐
- 加载.properties文件内容到内存----tomcat服务启动与停止的监听(使用ServletContextListener)
- 加载.properties文件内容到内存----tomcat服务启动与停止的监听(使用ServletContextListener)
- c 删除文件中指定的部分内容
- [Java] 利用xpdf库获取pdf文件的指定范围文本内容
- [Java] 利用xpdf库获取pdf文件的指定范围文本内容
- 将指定的文本内容写入到指定路径的文件
- IIS网站已经停止,提示服务器没有及时响应启动或控制请求!本地计算机法启动 World Wide Web Publishing 服务。提示 “错误127: 找不到指定的程序”或者“错误1721,资源不足,无法启动”
- 下载信息内容时文件名称的指定
- 将指定的asp文件内容生成HTML文件
- 清除指定squid缓存文件的脚本[原创]
- 停止锁住指定文件的所有相关作业
- 初来乍道,问个比较菜的问题:如何把一文件中指定的内容提取出来?
- 程序的方法启动或停止指定的系统后台服务
- 将指定的asp文件内容生成HTML文件
- 使用vi查找文件中指定内容并输出到文件
- SQL服务无法启动,提示“系统找不到指定的文件”
- 将指定的asp文件内容生成HTML文件
- 将指定的asp文件内容生成HTML文件
- Oracle9i服务启动和停止的批处理文件
- 删除txt文件内容的指定行