Java - удалить строку из текстового файла путем перезаписи при чтении

Я пытаюсь удалить строку текста из текстового файла без копирования во временный файл . Я пытаюсь сделать это, используя Printwriter и Scanner, и заставляю их просматривать файл одновременно, писатель записывает то, что читает Scanner, и перезаписывает каждую строку одним и тем же, пока не дойдет до строки, которую я хочу Удалить. Затем я продвигаю Сканер, но не писатель, и продолжаю, как прежде. Вот код:

Но сначала параметры: Мои имена файлов - это числа, так что это будет читать 1.txt или 2.txt и т.д., и поэтому f указывает имя файла. Я конвертирую его в String в конструкторе файла. Int n - это индекс строки, которую я хочу удалить.

public void deleteLine(int f, int n){
 try{
 Scanner reader = new Scanner(new File(f+".txt")); 
 PrintWriter writer = new PrintWriter(new FileWriter(new File(f+".txt")),false); 
 for(int w=0; w<n; w++)
   writer.write(reader.nextLine()); 
 reader.nextLine(); 
 while(reader.hasNextLine())
   writer.write(reader.nextLine());
 } catch(Exception e){
   System.err.println("Enjoy the stack trace!");
   e.printStackTrace();
 }
}

Выдает странные ошибки. В трассировке стека указано «NoSuchElementException» и «строка не найдена». Он указывает на разные линии; кажется, что это может сделать любой из вызовов nextLine (). Можно ли таким образом удалить строку?Если да, то что я делаю не так? Если нет, то почему? (Кстати, на всякий случай, текстовый файл содержит около 500 строк. Я не знаю, считается ли это большим или даже важным.)

8
задан Shelley 25 June 2011 в 12:38
поделиться