Java随机存取文件删除原始文本

Java随机存取文件删除原始文本,java,file-io,randomaccessfile,Java,File Io,Randomaccessfile,所以我用RandomAccessFile来读写java。但是,当我向文件写入字符串时,文件的当前内容将被覆盖。这是我的密码 import java.io.RandomAccessFile; public class hello{ public static void main(String[] args){ RandomAccessFile a; try{ a = new RandomAccessFile("a.txt", "rw"); Sys

所以我用RandomAccessFile来读写java。但是,当我向文件写入字符串时,文件的当前内容将被覆盖。这是我的密码

    import java.io.RandomAccessFile;
public class hello{
  public static void main(String[] args){
    RandomAccessFile a;
    try{
      a = new RandomAccessFile("a.txt", "rw");
      System.out.println(a.readLine());
      a.writeUTF("another text");
    }
    catch(Exception e){
      e.printStackTrace();
    }
  }
}
这是我的文件内容

101 yes no  yes no
102 no  no  yes no
103 yes no  yes no
104 no  no  yes no
105 no  yes no  no
106 yes yes yes no
但当我运行程序时,它就变成了

101 yes no  yes no
another text    no
103 yes no  yes no
104 no  no  yes no
105 no  yes no  no
106 yes yes yes no

我做错了什么?

我不完全确定这是否是您的问题,但我注意到RandomAccessFile上有一种方法,允许您将文件指针移动到文件末尾进行写入

您需要找到文件的长度

long fileLength = a.length();
然后需要将文件指针偏移到该位置,以便可以对其进行写入

a.seek(fileLength);
那会解决你的问题。 另一方面,你需要关闭你的资源。也许可以尝试使用以下资源:

 try (RandomAccessFile a = new RandomAccessFile("a.txt", "rw")) {
            long fileLength = a.length();
            a.seek(fileLength);
            System.out.println(a.readLine());
            a.writeUTF("another text");
        } catch (Exception e) {
            e.printStackTrace();
        }

显然,这取决于您使用的Java版本:但是我不能在第二行中写入而不覆盖现有的吗line@KidUser你试过我的方法了吗。它将在末尾写入“另一个文本”行。是的,我尝试过,但文件指针指向末尾,并且“另一个文本”在末尾写入,我希望它写入第二行RandomAcessFile#writeUTF开始在光标位置写入/覆盖内容,并且由于您已经使用
a.readLine()
,读取了一行内容,文件指针位于第二行的开头。在完成写入/读取后,最好使用
a.close()
关闭文件流。