写入文件而不覆盖或追加

时间:2012-06-15 17:43:53

标签: java file append overwrite

我正在用Java编写一个程序,其中输出被写入.txt文件。每次运行程序时,文件都会被覆盖。我不想使用追加开关并将数据添加到文件中。

我想拥有它,所以每次运行程序时都会创建一个具有相同名称的新文件。例如,如果overflow.txt是文件名,并且我运行程序三次,则应该生成文件overflow(1).txtoverflow(2).txtoverflow(3).txt

如何实现这一目标?

5 个答案:

答案 0 :(得分:3)

检查文件是否存在,如果是,则重命名。使用File.existsFileUtils.moveFile

您需要递归执行此操作,直到找不到冲突。

答案 1 :(得分: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);
}

根据实际要求进行修改。问题不是很清楚。

答案 2 :(得分:2)

“具有相同名称的新文件”在大多数文件系统中没有意义。

在您的示例中,您有三个不同名称的文件:

  • 溢出(1)的.txt
  • 溢出(2)的.txt
  • 溢出(3)的.txt

括号中的位仍然是名称的一部分。如果您想模仿该行为,则必须:

  • 检测是否存在“普通”文件名(如果你想写的话,如果它不存在的话)
  • 从1开始计数,每次删除扩展名,在括号中添加计数,然后将扩展名放回
  • ,计算出“新”文件名
  • 继续计数,直至找到不存在的文件名

答案 3 :(得分: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";
}

答案 4 :(得分:0)

当您实例化File对象时,请验证它是否存在,如果存在,只需添加大括号和数字重命名,然后再次检查。