2015-03-14 2 views
0

Я знаю предыдущие вопросы, КАК этот вопрос был задан, но этот вопрос имеет отношение к специфике написанного мной кода. Я пытаюсь обновить одну строку кода в файле, который будет постоянно обновляться, даже когда программа завершается так, что данные могут быть снова подняты. Метод, который я пишу в настоящее время выглядит следующим образом (без компиляции ошибок, найденных с затмением)Обновление одной строки в текстовом файле с использованием метода Java

public static void editLine(String fileName, String name, int element, 
      String content) throws IOException { 
     try { 
      // Open the file specified in the fileName parameter. 
      FileInputStream fStream = new FileInputStream(fileName); 
      BufferedReader br = new BufferedReader(new InputStreamReader(
        fStream)); 
      String strLine; 
      StringBuilder fileContent = new StringBuilder(); 

      // Read line by line. 
      while ((strLine = br.readLine()) != null) { 
       String tokens[] = strLine.split(" "); 
       if (tokens.length > 0) { 
        if (tokens[0].equals(name)) { 
         tokens[element] = content; 
         String newLine = tokens[0] + " " + tokens[1] + " " 
           + tokens[2]; 
         fileContent.append(newLine); 
         fileContent.append("\n"); 
        } else { 
         fileContent.append(strLine); 
         fileContent.append("\n"); 
        } 
       } 

       /* 
       * File Content now has updated content to be used to override 
       * content of the text file 
       */ 
       FileWriter fStreamWrite = new FileWriter(fileName); 
       BufferedWriter out = new BufferedWriter(fStreamWrite); 
       out.write(fileContent.toString()); 
       out.close(); 

       // Close InputStream. 
       br.close(); 
      } 
     } catch (IOException e) { 
      System.out.println("COULD NOT UPDATE FILE!"); 
      System.exit(0); 
     } 
    } 

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

+0

Можете ли вы изменить свой код, чтобы он выдавал полное исключение перед сообщением catch? – mjuarez

+2

Прочтите все. Напишите все. – christopher

+1

Вы игнорируете исключение и, следовательно, не знаете, почему вы его получили. Удалите блок ctach полностью или, по крайней мере, добавьте в него 'e.printStackTrace()'. –

ответ

1

Хорошо. Сначала с летучей мыши, StringBuilder fileContent = new StringBuilder(); - плохая практика, так как этот файл может быть больше, чем доступная память пользователя. Вы не должны хранить большую часть файла в памяти. Делайте это, читая в буфер, обрабатывая буфер (при необходимости настраивая его) и записывая буфер в новый файл. Когда закончите, удалите старый файл и переименуйте вторичное имя в старое. Надеюсь это поможет.

+0

Это действительно хороший ответ на этот вопрос. Это помогло мне увидеть, как увидеть снаружи. –

+0

Спасибо за признание. Ваш комментарий считается «+1» или «спасибо», то, что StackOverflow ищет в комментариях. Я не буду отмечать это, поскольку вы новичок на сайте. – Scruffy

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