В Java, как мне отредактировать 1 строку текстового файла? - PullRequest
4 голосов
/ 22 декабря 2010

Хорошо, поэтому я знаю значение строки, у меня нет номера строки, как бы я отредактировал только 1 строку?

Это файл конфигурации, т.е. x = y Я хочу команду для редактирования x= y к x = y, z.

или даже x = z.

Ответы [ 5 ]

2 голосов
/ 22 декабря 2010

В Java вы можете использовать `Properties class:
файл app.config:

x=y

java:

  public void writeConfig() throws Exception {
    Properties tempProp = new Properties();
    tempProp.load(new FileInputStream("app.config")); 
    tempProp.setProperty("x", "y,z");
    tempProp.store(new FileOutputStream("app.config"), null); 

  }
2 голосов
/ 22 декабря 2010

Если вы используете этот формат конфигурации, вы можете использовать

java.util.Properties

для чтения / записи в этом файле.

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

1 голос
/ 22 декабря 2010

Один из способов сделать это:

  1. Считать файл в память;например, как массив строк, представляющих строки файла.
  2. Найдите строку / строку, которую вы хотите изменить.
  3. Используйте регулярное выражение (или что-то еще) для изменения строки / строки
  4. Запишите новую версию файла из версии в памяти.

Существует много вариантов этого.Вы также должны позаботиться о том, чтобы написать новую версию файла, чтобы не потерять все, если что-то пойдет не так во время записи.(Обычно вы записываете новую версию во временный файл, переименовываете старую версию (например, в резервную копию) и переименовываете новую версию вместо старой.)

К сожалению, нетспособ добавить или удалить символы в середине обычного текстового файла, не переписывая большую часть файла.Эта «проблема» не характерна для Java.Это фундаментально для способа, которым текстовые файлы моделируются / представляются в большинстве основных операционных систем.

0 голосов
/ 22 декабря 2010

Если ваши данные - это все пары ключей и значений, например ...

ключ1 = значение1

ключ2 = значение2

... затем загрузите их вСвойства объекта.Вдобавок ко всему, вам понадобится FileInputStream для загрузки свойств, изменения с помощью myProperties.put (ключ, значение), а затем сохранения свойств с использованием FileOutputStream.

Надеюсь, это поможет!

ч

0 голосов
/ 22 декабря 2010

Если длина новой строки не совпадает со старой, лучше всего ставить

  • Открыть временный выходной файл
  • Читать файл конфигурации построчно
  • Поиск вашего ключа
  • Если вы не можете его найти, просто напишите только что прочитанную строку в выходной файл
  • Если вы можете найти его, напишите новыйвместо этого укажите значение временного файла
  • Пока вы не нажмете EOF
  • Удалить старый файл
  • Переименуйте новый файл в старый файл

ЕСЛИ ваша конфигурацияфайл маленький, вы также можете выполнить весь этап синтаксического анализа / изменения в памяти, а затем записать окончательный результат обратно в файл конфигурации, таким образом пропуская временный файл (хотя временный файл является хорошим способом предотвращения повреждения в случае поломкипока вы пишете файл).

Если это не то, что вы ищете, вы должны отредактировать свой вопрос, чтобы быть более понятным.Я просто догадываюсь, о чем ты просишь.

...