2013-11-09 3 views
1

Как добавить существующую строку в текстовый файл? Что делать, если строка, подлежащая редактированию, находится в середине файла? Пожалуйста, предложите предложение, учитывая следующий код.Как добавить существующую строку в текстовый файл

Have прошел через & попытался следующие:

Мой код:

filePath = new File("").getAbsolutePath(); 
    BufferedReader reader = new BufferedReader(new FileReader(filePath + "/src/DBTextFiles/Customer.txt")); 
    try 
    {       
     String line = null;   
     while ((line = reader.readLine()) != null) 
     { 
      if (!(line.startsWith("*"))) 
      { 
       //System.out.println(line); 

       //check if target customer exists, via 2 fields - customer name, contact number 
       if ((line.equals(customername)) && (reader.readLine().equals(String.valueOf(customermobilenumber)))) 
       { 
        System.out.println ("\nWelcome (Existing User) " + line + "!"); 

        //w target customer, alter total number of bookings @ 5th line of 'Customer.txt', by reading lines sequentially 
        reader.readLine(); 
        reader.readLine(); 
        int total_no_of_bookings = Integer.valueOf(reader.readLine()); 

        System.out.println (total_no_of_bookings); 
        reader.close(); 
        valid = true; 


        //append total number of bookings (5th line) of target customer @ 'Customer.txt' 
        try { 
         BufferedWriter writer = new BufferedWriter(new FileWriter(new File(filePath + "/src/DBTextFiles/Customer.txt"))); 
         writer.write(total_no_of_bookings + 1); 
         //writer.write("\n"); 
         writer.close(); 
        } 
        catch (IOException ex) 
        { 
         ex.printStackTrace(); 
        } 
        //finally 
        // { 
         //writer.close(); 
        //} 
       }     
      } 
     }  

ответ

1

Метод reader.readLine() увеличивает строку каждый раз, когда она вызывается. Я не уверен, что это предназначено в вашей программе, но вы можете захотеть сохранить reader.readline() как String, поэтому он вызывается только один раз.

Чтобы добавить строку в середине текстового файла, я считаю, что вам придется переписать текстовый файл до той точки, где вы хотите добавить строку, а затем перейдите к записи остальной части файла. Это может быть достигнуто путем хранения всего файла в массиве String, а затем записи до определенной точки.

Пример письма:

BufferedWriter writer = new BufferedWriter(new FileWriter(new File(path))); 
writer.write(someStuff); 
writer.write("\n"); 
writer.close(); 
+0

readline() предназначен для меня, чтобы перейти к нужной строке. Что касается реализации, как мне переписать текстовый файл и написать все остальное? любой пример пожалуйста? или это применимо? - http://www.raghuwansh.com/2013/07/10/write-text-file-in-java/ – user2945412

+0

Вы можете использовать BufferedWriter – grimrader22

+1

Проверьте мое редактирование. Это помогает? – grimrader22

2

Чтобы иметь возможность добавлять содержимое в существующий файл, который вы нужно открыть его в append m ода. Например, используя FileWriter(String fileName, boolean append) и передавая true в качестве второго параметра.

Если линия находится посередине, вам необходимо прочитать весь файл в памяти, а затем записать его, когда все изменения были выполнены.

Это может быть работоспособно для небольших файлов, но если ваши файлы слишком большие, я бы предложил записать фактический контент и отредактированный контент во временный файл, после чего удалить старый, переименовать временный файл, который будет то же имя, что и старый.

+0

+1 «Когда это было сделано, удалите старый, переименуйте файл темпа под тем же именем, что и старый» :) – async

0

AFAIK вы не можете этого сделать. Я имею в виду, что добавление строки возможно, но не вставка в середине. Это не имеет никакого отношения к java или другому языку ... файл представляет собой последовательность записанных байтов ... если вы вставляете что-то в произвольную точку, эта последовательность больше не действительна и должна быть переписана.

Так в основном вы должны создать функцию, чтобы сделать это для чтения вставки срезы-перепишут

1

Вы, вероятно, следует следовать советам в ответ на второй ссылке вы публикуемую. Вы можете получить доступ к середине файла с помощью random access file, но если вы начнете добавлять в произвольное положение в середине файла без записи того, что есть, когда вы начинаете писать, вы будете перезаписывать его текущее содержимое, как указано в this answer. Лучше всего, если только файлы, о которых идет речь, являются чрезмерно большими, нужно собрать новый файл, используя существующий файл и ваши новые данные, как ранее предлагали другие.

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