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

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

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

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

 NominSim15 июн. 2012 г., 19:46
overflow (1) .txt - это не тот же файл, что overflow (2) .txt; у них разные имена.

Ответы на вопрос(5)

Проверьте, существует ли файл, если это так, переименуйте его. С помощьюFile.exists а такжеFileUtils.moveFile

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

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

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

overflow(1).txt overflow(2).txt overflow(3).txt

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

Detect the presence of the "plain" filename (if you want to write to that if it doesn't exist) Start counting at 1, and work out the "new" filename each time by removing the extension, adding the count in brackets, then putting the extension back Keep counting until you find a filename which doesn't exist
 15 июн. 2012 г., 19:50
согласен ..........
 15 июн. 2012 г., 19:47
Я думаю, что он хочет откат, когда overflow.txt создается в первый раз, а затем переименовывается в overflow (2) .txt при следующем запуске приложения. Похоже, система прокатки файлов log4j.
 15 июн. 2012 г., 20:11
@ Пол: Нет. По крайней мере, не в большинстве файловых систем. Как бы вы их различали, если бы не по имени?
 15 июн. 2012 г., 19:48
@JohnB: из вопроса не совсем понятно ...
 Paul15 июн. 2012 г., 20:03
@JonSkeet Я прошу прощения, и вы правы. Я перечислил три разных файла. Но возможно ли иметь несколько файлов с одним и тем же именем, но разными данными?

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

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

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

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";
}

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

 15 июн. 2012 г., 19:51
да, вот почему я сказал проверить еще раз xD
 15 июн. 2012 г., 19:49
Должен быть рекурсивный метод, чтобы гарантировать, что переименование не конфликтует.

Ваш ответ на вопрос