2017-01-26 3 views
0

Так что я использовал RandomAccessFile для чтения и записи в java. Но когда я пишу строку в файл, текущее содержимое файла переопределяется. Вот мой кодJava RandomAccessFile Удаление Исходный текст

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 

что я сделал не так?

+0

RandomAcessFile # writeUTF начинает писать/перезаписи содержимого в позиции курсора и так как вы уже прочитали одну строку с помощью 'a.readLine()', указатель файла устанавливается на начало второй линии. Также лучше всего закрыть поток файлов с помощью 'a.close()' после того, как вы закончите писать/читать. –

ответ

0

Я не совсем уверен, если это ваша проблема, но я заметил, что существует метод seek на RandomAccessFile, который позволяет переместить указатель файла в конец файла для записи.

0

Вам нужно найти длину файла

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(); 
     } 
+0

Очевидно, что в зависимости от версии Java, с которой вы работаете: https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html –

+0

, но я не могу писать во второй строке без перезаписи существующей строки – KidUser

+0

@KidUser вы пробовали исправить. Он напишет строку «другой текст» в конце. –

Смежные вопросы