Запись в файл без перезаписи или добавления

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

Я хотел бы, чтобы каждый раз, когда я запускаю программу, создавался новый файл с тем же именем. Например, если overflow.txt — это имя файла, и я запускаю программу три раза, должны быть созданы файлы overflow(1).txt, overflow(2).txt и overflow(3).txt.

Как этого добиться?


person Paul    schedule 15.06.2012    source источник
comment
overflow(1).txt — это не тот же файл, что и overflow(2).txt; у них разные названия.   -  person NominSim    schedule 15.06.2012


Ответы (4)


Проверьте, существует ли файл, если да, переименуйте его. Использование File.exists и FileUtils.moveFile

Вам нужно будет делать это рекурсивно, пока не будет найден конфликт.

person John B    schedule 15.06.2012

Сначала проверьте, существует ли файл. Если да, измените имя.

String origName = "overflow";
String ext = ".txt";
int num = 1;
file = new File(origName + ext);
while (file.exists()) {
 num++;
 file = new File(myOrigFileName +"(" + num + ")" + ext);
}

Измените в зависимости от фактических требований. Вопрос не очень понятен.

person kaliatech    schedule 15.06.2012

«Новый файл с тем же именем» не имеет смысла в большинстве файловых систем.

В вашем примере у вас есть три файла с разными именами:

  • переполнение (1).txt
  • переполнение (2).txt
  • переполнение (3).txt

Бит в скобках по-прежнему является частью имени. Если вы хотите подражать этому поведению, вам необходимо:

  • Обнаружить наличие «простого» имени файла (если вы хотите записать его, если оно не существует)
  • Начните считать с 1 и каждый раз определяйте «новое» имя файла, удаляя расширение, добавляя количество в скобках, а затем возвращая расширение обратно.
  • Продолжайте считать, пока не найдете несуществующее имя файла.
person Jon Skeet    schedule 15.06.2012
comment
Я думаю, что он хочет, чтобы overflow.txt создавался в первый раз, а затем переименовывался в overflow(2).txt, когда приложение запускалось в следующий раз. Звучит как файловая система log4j. - person John B; 15.06.2012
comment
@JonSkeet Прошу прощения, и вы правы. Я перечислил три разных файла. Но возможно ли иметь несколько файлов с одинаковым именем, но разными данными? - person Paul; 15.06.2012
comment
@Paul: Нет. По крайней мере, не в большинстве файловых систем. Как бы вы их отличили, если бы не по именам? - person Jon Skeet; 15.06.2012

Когда вы создаете экземпляр объекта File, проверьте, существует ли он, если да, просто переименуйте его, добавив фигурные скобки и число, и проверьте еще раз.

person Ed Morales    schedule 15.06.2012
comment
Должен быть рекурсивный метод, чтобы гарантировать, что переименование не конфликтует. - person John B; 15.06.2012
comment
ага, вот почему я сказал проверить еще раз xD - person Ed Morales; 15.06.2012