如果文件已存在,如何使用附加递增编号创建新文件?

时间:2015-10-20 09:00:15

标签: java file

我有一小段代码

String fileName = "test.txt"
Path path = Paths.get(fileName);
File f = null;
if (Files.exists(path)) {
    LOGGER.warn("File allready exists!");
    f = new File("COPYOF-" + fileName);
} else {
    f = new File(fileName);
}

它有效,但它没有做我想做的事情......

我想这样做"适当的"方式。

首次下载时,文件名为test.txt。第二个 - test(1).txt。第三个:test(2).txt等。

目前它正在以test.txt下载它,第二次将其命名为COPYOF-test.txt,在第三次尝试时它只是覆盖COPYOF-test.txt文件。

我正在寻找实施此解决方案的正确方法,但我不知道该怎么做......

3 个答案:

答案 0 :(得分:4)

工作代码:

String fileName = "test.txt";

String extension = "";
String name = "";

int idxOfDot = fileName.lastIndexOf('.');   //Get the last index of . to separate extension
extension = fileName.substring(idxOfDot + 1);
name = fileName.substring(0, idxOfDot);

Path path = Paths.get(fileName);
int counter = 1;
File f = null;
while(Files.exists(path)){
    fileName = name+"("+counter+")."+extension;
    path = Paths.get(fileName);
    counter++;
}
f = new File(fileName);

<强>解释

  1. 首先分开extensionfile name without extension并设置counter=1,然后检查此文件是否存在。如果存在则转到步骤2,否则转到步骤3.

  2. 如果文件存在,则使用file name without extension + ( + counter + ) + extension生成新名称并检查此文件是否存在。如果存在,则以增量counter重复此步骤。

  3. 此处使用最新生成的文件名创建文件。

答案 1 :(得分:1)

String fileName = "test.txt";
String[] parts = fileName.split(".");
Path path = Paths.get(fileName);
File f = null;
int i = 1;
while (Files.exists(path)) {
    LOGGER.warn("File allready exists!");
    i++;
    path = Paths.get(parts[0] + "(" + i + ")" + parts[1]);
} 
f = new File(parts[0] + "(" + i + ")" + parts[1]);

PS:我只是为incrementFileName(String fileName)添加一个特定的方法。它会更干净的代码。并且您将能够检查特定情况(带点的文件,montextpartie(1)et(3).txt ... Etc

答案 2 :(得分:0)

概括了Fundhor的答案:

String fileName = "test.txt";
ArrayList<String> fileNameArray = Arrays.asList(fileName.split("\\."));
String fileExtension = fileNameArray.remove(fileNameArray.size() - 1);
StringBuilder strBuilder = new StringBuilder();
while (fileNameArray.size() != 0) {
   strBuilder.append(fileNameArray.remove(0));
}
String fileNameWithoutExtension = strBuilder.toString();
Path path = Paths.get(fileName);
File f = null;
int i = 1;
while(Files.exists(path)) {
    LOGGER.warn("File already exists!");
    fileName = fileNameWithoutExtension + "(" + i + ")" + "." + fileExtension;
    path = Paths.get(fileName);
}
f = new File(fileName);

我的回答还允许文件名名称中包含句点,例如part1.part2.extension