在Windows上的Java中检查文件是否为空的最有效方法

2022-09-01 11:21:43

我正在尝试检查日志文件是否为空(意味着没有错误),在Java中,在Windows上。到目前为止,我已经尝试使用2种方法。

方法 1(失败)

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!");

方法 2(失败)

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的建议,我也尝试过使用a,但没有成功。这是片段,如果有人感兴趣的话。FileReader

Reader reader = new FileReader(sLogFilename);
int readSize = reader.read();
if (readSize == -1)
    System.out.println("NO ERRORS!");
else
    System.out.println("SOME ERRORS!");

答案 1

检查文件的第一行是否为空:

BufferedReader br = new BufferedReader(new FileReader("path_to_some_file"));     
if (br.readLine() == null) {
    System.out.println("No errors, and file empty");
}

答案 2

为什么不直接使用:

File file = new File("test.txt");

if (file.length() == 0) {
    // file empty
} else {
    // not empty
}

有什么问题吗?