往文件里写文件,写了好多内容了,文件大小却显示为0

ztt_southinfo 2012-01-13 11:48:34
往文件里写文件,写了好多内容了,文件大小却显示为0。这是为什么呢?这些文件是我用java写的日志文件。
代码如下:package com.southinfo.kedaoservice.log;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.lang.reflect.Field;
import java.util.Date;

import com.southinfo.kedaoservice.util.DateUtil;

public class Logger {

private Class<?> cls;

private PrintStream printStream;

public static Logger getLogger(Class<?> cls) {
String filePath = null;
try {
Class<?> forName = Class
.forName("com.southinfo.kedaoservice.core.Config");
Field declaredField = forName.getDeclaredField("ID");
filePath = "logs/[" + declaredField.get(null) + "]"
+ cls.getSimpleName() + ".log";
} catch (ClassNotFoundException e) {
filePath = "logs/[_]" + cls.getSimpleName() + ".log";
} catch (Exception e) {
System.err.println("生成日志文件出错!");
System.exit(1);
}

Logger logger = new Logger();
logger.cls = cls;
try {
logger.printStream = new PrintStream(new FileOutputStream(new File(
filePath)));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return logger;
}

public void info(String message) {
info(message, null);
}

public void info(String message, Exception e) {
String output = DateUtil.format(new Date()) + " INFO "
+ cls.getSimpleName() + " " + message;
printStream.append(output + "\r\n");
System.out.println(output);
if (e != null) {
e.printStackTrace(printStream);
}
}

public void error(String message) {
error(message, null);
}

public void error(String message, Exception e) {
String output = DateUtil.format(new Date()) + " ERROR "
+ cls.getSimpleName() + " " + message;
printStream.append(output + "\r\n");
System.out.println(output);
if (e != null) {
e.printStackTrace(printStream);
}
}

public void debug(String message) {
debug(message, null);
}

public void debug(String message, Exception e) {
String output = DateUtil.format(new Date()) + " DEBUG "
+ cls.getSimpleName() + " " + message;
System.out.println(output);
printStream.append(output + "\r\n");
if (e != null) {
e.printStackTrace(printStream);
}
}

public Class<?> getCls() {
return cls;
}

public void setCls(Class<?> cls) {
this.cls = cls;
}

public PrintStream getPrintStream() {
return printStream;
}

public void setPrintStream(PrintStream printStream) {
this.printStream = printStream;
}

}
...全文
780 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞跃颠峰 2012-01-13
  • 打赏
  • 举报
回复
由于是日志文件,推测你打开文件看的时候,Java这边仍没有关闭文件,处于写入状态。
这样没有别的好办法,在程序里经常flush一下吧
MiceRice 2012-01-13
  • 打赏
  • 举报
回复
这个,应该跟你操作系统有关,操作系统没有去刷新它自己的缓存数据。

另外,可以考虑定期执行flush(),避免数据在缓存中而没有实际写入系统,那么程序意外终止,这些数据就没了;不过一般来说缓存不会很大。
ztt_southinfo 2012-01-13
  • 打赏
  • 举报
回复
如果,我去打开这个文件的话,它又显示大小了。例如,原来是0KB,写入内容5分钟后,刷新它还是0KB,打开它,大小缺变成了26KB。
ztt_southinfo 2012-01-13
  • 打赏
  • 举报
回复
flush()这个方法没有效果。我倒是用了close()方法试了一下,可以出来大小了,不过,它不往下运行了。。。。彻底关闭文件流了,怎么办?有什么方法打开已关闭的文件流?[Quote=引用 5 楼 afer198215 的回复:]

OutputStream 都有flush()方法。
另外,你在日志文件所在目录,常按"F5"几下。
[/Quote]
想喝咖啡的貓 2012-01-13
  • 打赏
  • 举报
回复
OutputStream 都有flush()方法。
另外,你在日志文件所在目录,常按"F5"几下。
ztt_southinfo 2012-01-13
  • 打赏
  • 举报
回复
小弟找不到在哪里关闭文件流,或者flush。我试写了一下,没成功唉

50,526

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧