Java write()函数

时间:2010-12-27 20:58:01

标签: java

java中的write()函数将新数据附加到文件末尾。这是我的问题; java如何知道文件结尾?

  1. 通过阅读整个文件来查找文件结尾
  2. 它知道文件结尾的位置
  3. 哪一个?提前致谢

3 个答案:

答案 0 :(得分:5)

许多操作系统都有特定的文件打开模式,其中写入总是写入文件的末尾。 Java可以使用它将数据附加到文件的末尾。

例如,open()内核API函数的手册页可以接受O_APPEND标志:

       O_APPEND        append on each write

 Opening a file with O_APPEND set causes each write on the file to be
 appended to the end.  

写入文件末尾的另一种方法是使用lseek()子函数首先SEEK_END到文件的末尾(请参阅lseek(2)手册页)。对文件的新写入将出现在当前文件指针的位置。

但是,lseek()方法可能会导致两个不同的编写器在尝试写入相同的偏移量时覆盖彼此的数据。因此,通常使用第一种方法打开日志文件等文件。没有任何理由在 else 的任何地方将数据写入日志文件而不是结尾。

答案 1 :(得分:1)

答案 2 :(得分:0)

对于Unix / Linux至少,答案是操作系统负责这一点。 Java只使用提供的操作系统文件描述符来跟踪应用程序在文件中的当前位置。

  • 如果您正常打开文件(append == false),那么write会在文件描述符的当前位置写入数据,然后将其更新为指向刚刚写入数据后的位置

  • 如果您以附加模式打开文件(append == true),则每个write都会在文件的当前末尾写入数据。

请注意,其他Unix / Linux I / O操作使用并更新文件描述符的当前位置;例如readseektell

  

这是我的问题; java如何知道文件结尾?

     
      
  1. 通过阅读整个文件来查找文件末尾:

  2.   
  3. 它知道文件结尾的位置:不完全。通常是操作系统知道,而不是   爪哇

  4.