我有一小段代码
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
文件。
我正在寻找实施此解决方案的正确方法,但我不知道该怎么做......
答案 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);
<强>解释强>
首先分开extension
和file name without extension
并设置counter=1
,然后检查此文件是否存在。如果存在则转到步骤2,否则转到步骤3.
如果文件存在,则使用file name without extension
+ (
+ counter
+ )
+ extension
生成新名称并检查此文件是否存在。如果存在,则以增量counter
重复此步骤。
此处使用最新生成的文件名创建文件。
答案 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