如何在Java中限制文件大小

如何在Java中限制文件大小,java,android,Java,Android,我正在我的应用程序中创建一个文件,并且我一直在向这个文件中写入一些内容 但是当我的文件达到一定的大小,比如说100行后,我想删除第一行并将新行写入底部 要求是我的文件应该是有限的,但它应该保持我写在文件中的最新内容 请让我知道它是否可以在Java中使用?请让我知道,如果有任何替代做这件事 请让我知道是否可以使用Java? 这不是一个简单的方法。只能截断文件的最后一部分。(这是来自底层文件系统的继承限制,原因与为什么不能在文件中间插入字节)。 您可以通过以下方式手动执行此操作: 计算第一行的字节长

我正在我的应用程序中创建一个文件,并且我一直在向这个文件中写入一些内容

但是当我的文件达到一定的大小,比如说100行后,我想删除第一行并将新行写入底部

要求是我的文件应该是有限的,但它应该保持我写在文件中的最新内容

请让我知道它是否可以在Java中使用?请让我知道,如果有任何替代做这件事

请让我知道是否可以使用Java?

这不是一个简单的方法。只能截断文件的最后一部分。(这是来自底层文件系统的继承限制,原因与为什么不能在文件中间插入字节)。

您可以通过以下方式手动执行此操作:

  • 计算第一行的字节长度
    n
  • 对于
    i=n。。。文件长度
  • 将pos
    i
    处的字节写入pos
    i-n
  • 将文件截断为文件的长度
    长度-n
  • 如果有其他选择,请告诉我。


    我建议您使用循环缓冲区或类似的方法来解决它。尽管如此,如果不是所有行都一样长,您还是会遇到麻烦,除非您将缓冲区保留在内存中,并将其转储到(已清除的)文件中。

    这是可以做到的,但可能是一个非常缓慢的过程,具体取决于您如何实现它。在数据结构中,至少要像矢量一样将100行保留在内存中,这样就不必每次都读取文件,只需在每次删除第一个元素并附加新的最终元素时写入文件即可

    另一种选择是将每一行存储在自己的文件中。然后,您只需删除一个文件并为第100行之后的每一行创建一个新文件

    [很久以后] 如果行的大小可以预测,可以考虑另一种方法,固定长度的记录。每行都是一个空格,后跟文本,后跟空格以填充记录,如果需要的话,可以在末尾加上行尾字符。每次写入记录时,都会在记录前面加上一个星号,将其标记为当前行,然后索引到前一行(使用模运算符,使其自动换行),并用空格替换该星号。示例10行日志文件如下所示:

     this happened at that time                        
     blah blah happened                             
    *this is the current record
     this was the fourth event to occur after startup
     this was the fifth event to occur after startup
     this was the sixth event to occur after startup
     this was the seventh event to occur after startup
     this was the eighth event to occur after startup
     this was the ninth event to occur after startup
     this was the tenth event to occur after startup
    

    这样,您只需打开文件,索引到当前行(您知道这是因为您在程序中跟踪;否则,在重新启动时,循环查找星号),然后覆盖它,用空格填充到所选的长度。然后索引一条记录并用空格替换星号。

    我会使用循环缓冲区。我用两个文件实现它,如果第一个文件包含100行,则开始使用第二个文件。当文件达到100行时,切换回写入第一行。这样,您的总行数将始终为100到200行(第一次至少达到100行)。

    当行数超过100行时,您可以使用代码将文件拆分为另一行,然后删除旧的?当然,这在cpu时间上比您所寻找的要昂贵,但它可以解决您的问题。