Android File.length() returns 0 写入时
Android File.length() returns 0 while writing to it
我的应用程序中有一个不断被写入的日志文件,有时我需要检查它的大小。问题是每当我在另一个线程中快速检查它的大小时,它有时 returns 0,即使里面有明确的数据。
例如,文件大小输出看起来像这样:(数字是字节)
E/DataLogger: Size: 3403
E/DataLogger: Size: 3454
E/DataLogger: Size: 3454
E/DataLogger: Size: 3454
E/DataLogger: Size: 0
E/DataLogger: Size: 3500
E/DataLogger: Size: 3500
E/DataLogger: Size: 3812
我也尝试过 FileUtils.readFileToByteArray()
并注意到相同的行为。为什么这两种方法有时都会随机 return 0?
我不知道您正在使用的日志记录 API 但大多数日志记录 API 在文件达到定义的大小时都有一个循环系统。
当发生轮换时,记录器可能会对文件或文件内容进行一些移动操作,以归档实际的日志文件。这解释了文件大小一次为 0。
一般来说,您可以自定义文件循环(触发归档循环的文件大小、归档日志的数量等...)
要进一步了解,您可以研究日志记录的旋转参数 API。
原来我偶尔会覆盖文件,这会在写入新数据之前将文件大小短暂设置为 0。
我的应用程序中有一个不断被写入的日志文件,有时我需要检查它的大小。问题是每当我在另一个线程中快速检查它的大小时,它有时 returns 0,即使里面有明确的数据。
例如,文件大小输出看起来像这样:(数字是字节)
E/DataLogger: Size: 3403
E/DataLogger: Size: 3454
E/DataLogger: Size: 3454
E/DataLogger: Size: 3454
E/DataLogger: Size: 0
E/DataLogger: Size: 3500
E/DataLogger: Size: 3500
E/DataLogger: Size: 3812
我也尝试过 FileUtils.readFileToByteArray()
并注意到相同的行为。为什么这两种方法有时都会随机 return 0?
我不知道您正在使用的日志记录 API 但大多数日志记录 API 在文件达到定义的大小时都有一个循环系统。 当发生轮换时,记录器可能会对文件或文件内容进行一些移动操作,以归档实际的日志文件。这解释了文件大小一次为 0。
一般来说,您可以自定义文件循环(触发归档循环的文件大小、归档日志的数量等...)
要进一步了解,您可以研究日志记录的旋转参数 API。
原来我偶尔会覆盖文件,这会在写入新数据之前将文件大小短暂设置为 0。