【发布时间】:2011-11-03 16:09:20
【问题描述】:
我正在尝试检查日志文件是否为空(意味着没有错误),在 Java 中,在 Windows 上。到目前为止,我已经尝试过使用 2 种方法。
方法一(失败)
FileInputStream fis = new FileInputStream(new File(sLogFilename));
int iByteCount = fis.read();
if (iByteCount == -1)
System.out.println("NO ERRORS!");
else
System.out.println("SOME ERRORS!");
方法二(失败)
File logFile = new File(sLogFilename);
if(logFile.length() == 0)
System.out.println("NO ERRORS!");
else
System.out.println("SOME ERRORS!");
现在,当日志文件为空(没有内容)但文件大小不为零(2 个字节)时,这两种方法都会失败。
检查文件是否为空的最有效和准确的方法是什么?我要求效率,因为我必须循环检查文件大小数千次。
注意:文件大小会徘徊在几到 10 KB 左右!
方法 3(失败)
按照@Cygnusx1 的建议,我也尝试过使用FileReader,但没有成功。这是sn-p,如果有人感兴趣的话。
Reader reader = new FileReader(sLogFilename);
int readSize = reader.read();
if (readSize == -1)
System.out.println("NO ERRORS!");
else
System.out.println("SOME ERRORS!");
【问题讨论】:
-
我不明白文件怎么可以是空的,但仍然有 2 个字节的大小?我已经编写了与您完全相同的代码,并且使用一个空文件,在您的情况下,我得到了预期的结果 NO ERRORS。
-
好吧,忘了我的评论,看看 BOM 和 unicode。
-
Unicode编码经常使用一个BOM字段作为标识符,占用255字节。我的猜测是,您的空文件是 ANSI 编码的。尝试使用 Unicode 编码。
-
是的,我看到了,问题:您可以控制此日志文件的创建吗?你能把它的编码改成UTF-8吗?它会解决你的问题。
-
我已经考虑过了。但在我的具体情况下,遗憾的是,没有。
标签: java file logging file-io filesystems