检查文件是否存在,如果存在则创建一个具有更大编号的新文件

问题描述 投票:0回答:3

我正在尝试输出我的程序创建的一组点,并且我希望能够多次运行它,而不必手动移动文件或重命名它们。
我输出的文件的名称类似于“cluster-1.txt”(如果需要可以更改)。所以我需要我的程序来找出集群输出文件是否存在,找到编号最大的文件并创建一个编号更大的文件。

例如,如果程序第一次运行,它会检查,没有找到文件,并创建“cluster-0.txt”;如果程序第二次运行,它会检查并找到“cluster-0.txt”并创建“cluster-1.txt”;如果程序第n次运行,它将检查并找到具有最高n值的文件,并创建一个名为“cluster-n+1.txt”的文件。

如果可能的话,它应该忽略中间丢失的任何文件。因此,如果我有 cluster-0.txt、cluster-10.txt 和 cluster-11.txt,它应该创建 cluster-12.txt。但这不是必需的。

java file-io file
3个回答
2
投票
  1. 读取目录下的所有文件。 类文件
  2. 解析文件名并检索文件号。 字符串类
  3. 仅选择最大的数字。 整数类数学类
  4. 如果存在最高数字,则创建文件-[最高数字 + 1].txt,否则 cluster-1.txt

1
投票

最简单的方法可能是使用 File.list 获取输出目录中的所有文件名,然后使用手动编码逻辑或 Regex 查找与您的模式匹配的文件名。扫描整个列表后,您就会知道现有的最大数字是多少。


0
投票

试试这个(抽象类中使用的方法和属性,也适用于打开的文件)

private static final String USER_HOME = System.getProperty("user.home");
private static final String DOWNLOAD_FOLDER = "Downloads";

public abstract String getFileName();

public abstract String getExtension();

public File createFile() {

    int version = 0;
    File file = getFilePath(version);

    for (version = 1; file.exists(); version++) {
        file = getFilePath(version);
    }

    return file;
}

private File getFilePath(final int version) {

    final Path path = (version == 0)
            ? Paths.get(USER_HOME, DOWNLOAD_FOLDER, getFileName() + getExtension())
            : Paths.get(USER_HOME, DOWNLOAD_FOLDER, getFileName() + " (" + version + ")" + getExtension());

    return path.toFile();
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.