2012-06-15 5 views
0

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

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

Как это можно достичь?

+3

overflow (1) .txt - это не тот файл, что и переполнение (2) .txt; у них разные имена. – NominSim

ответ

2

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

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

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

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

  • Обнаружить присутствие «простой» имя файла (если вы хотите написать, что если он не существует)
  • Начало подсчета голосов на 1, и выработать «новое» имя файла каждый раз, удалив расширение, добавив количество в скобках, а затем положить расширение назад
  • Держите отсчет до тех пор, пока не найдете имя файла, который не существует
+0

Я думаю, что он хочет перевернуть, где overflow.txt создается в первый раз, а затем переименовывается в файл переполнения (2) .txt, когда приложение запускается в следующий раз. Похоже, что система прокатки файлов log4j. –

+0

@JohnB: Это не совсем ясно из вопроса ... –

+0

concur .......... –

3

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

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

0

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

+0

Там должен быть рекурсивный метод, чтобы гарантировать, что переименование не конфликтует. –

+0

yep, вот почему я сказал еще раз проверить xD –

3

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

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

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

1
String dirPath = "./"; 
String fileName = dirPath + "overflow.txt"; 
if(new File(dirPath + fileName).exist()) 
{ 
    int counter = 0; 
    while(new File(dirPath + "overflow(" + ++counter + ").txt").exist()); 
    fileName = "overflow(" + counter + ").txt"; 
} 
Смежные вопросы