如何写/读到文本文件的开头?

Cod*_*ody 3 java text file

编辑 这是我的文件阅读器,我可以从下到上阅读它,看看从下到上写它是多么困难.

        BufferedReader mainChat = new BufferedReader(new FileReader("./messages/messages.txt"));
    String str;
    while ((str = mainChat.readLine()) != null) 
    {
        System.out.println(str);
    }
    mainChat.close();
Run Code Online (Sandbox Code Playgroud)

或(旧问题)

如何让它将下一个String放在文件的开头,然后插入一个新行(将其他行向下移动)?

FileWriter chatBuffer = new FileWriter("./messages/messages.txt",true);
BufferedWriter mainChat = new BufferedWriter(chatBuffer);
mainChat.write(message);
mainChat.newLine();
mainChat.flush();
mainChat.close();
Run Code Online (Sandbox Code Playgroud)

San*_*har 6

有人可以纠正我,但我很确定在大多数操作系统中,没有选择,只能读取整个文件,然后再写回来.

我想主要原因是,在大多数现代操作系统中,光盘上的所有文件都始于边界的开头.问题是,您无法告诉文件分配表您的文件比该点更早开始.

因此,必须重写文件中的所有后续字节.我不知道任何操作系统例程只需一步即可完成.

因此,我会使用a BufferedReader将整个文件存储到一个Vector或中StringBuffer,然后首先使用前置字符串将其全部写回来.

-

编辑

一种为大型文件节省内存的方法,阅读@ Saury的randomaccessfile建议,将是:

file has N bytes to start with
we want to add on "hello world"
open the file for append
append 11 spaces
i=N
loop {
   go back to byte i
   read a byte 
   move to byte i+11
   write that byte back
   i--
} until i==0
then move to byte 0
write "hello world" 
Run Code Online (Sandbox Code Playgroud)