Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建并增加文件名(如果名称存在)_Java_File - Fatal编程技术网

Java 创建并增加文件名(如果名称存在)

Java 创建并增加文件名(如果名称存在),java,file,Java,File,我有一个存储测试问题的文件 "Test.ser" 我希望能够创建具有相同名称的文件,但每次有人参加测试时都会附加一些增量,以存储答案 "Test1.ser" "Test2.ser" ... 然而,我想不出一个方法来实现这一点。计数器可以工作,但如果有人重新运行程序,计数器将重置 有人知道这是怎么可能的吗?非常感谢 编辑: 无法将其增量超过文件名1.ser,我建议您使用 public static void main(String[] args) { String fmt = "

我有一个存储测试问题的文件

"Test.ser"
我希望能够创建具有相同名称的文件,但每次有人参加测试时都会附加一些增量,以存储答案

"Test1.ser"
"Test2.ser"
   ...
然而,我想不出一个方法来实现这一点。计数器可以工作,但如果有人重新运行程序,计数器将重置

有人知道这是怎么可能的吗?非常感谢

编辑:

无法将其增量超过文件名1.ser,我建议您使用

public static void main(String[] args) {
    String fmt = "Test%02d.ser";
    File f = null;
    for (int i = 1; i < 100; i++) {
        f = new File(String.format(fmt, i));
        if (!f.exists()) {
            break;
        }
    }
    try {
        System.out.println(f.getCanonicalPath());
    } catch (IOException e) {
        e.printStackTrace();
    }
}

解决这个问题的一个简单方法是在文件名后面加上日期和时间

例如,使用格式(YYYYMMDD-HHMM):


只要不断增加计数器并尝试文件名,直到文件名不存在。@JasonC谢谢Jason,我没有想到这一点。我将尝试使用这种方法!类文件有一个exists()方法。只需创建一系列文件名,直到找到一个未使用的文件名。尝试使用您的策略,但会出现问题。我发布了一个编辑。如果存在100个文件,这将抛出一个NPE。可能不是令人满意的行为。@JasonC我决定如果你考试失败100次,它应该很快失败,我认为101次考试不会有帮助。我的意思是,它应该失败,因为它应该有比NPE更多的信息。(“不可取”)指的是抛出NPE,而不是在100个文件之后失败,抱歉。)添加到这一点:考虑添加秒,或者在结尾(或者甚至进程或线程ID)上随机字符串,如果多个用户可以同时进行此测试,或者测试可能需要不到60秒的时间才能完成。这种方法很适合创建文件,但在读取文件时不实用。为什么不呢?您可以使用正则表达式获取名称,这相当快。也许我应该在日期和时间之前添加一个answersId,这样您就可以通过answersId轻松地读取文件。
public static void main(String[] args) {
    String fmt = "Test%02d.ser";
    File f = null;
    for (int i = 1; i < 100; i++) {
        f = new File(String.format(fmt, i));
        if (!f.exists()) {
            break;
        }
    }
    try {
        System.out.println(f.getCanonicalPath());
    } catch (IOException e) {
        e.printStackTrace();
    }
}
for (int i = 1;; i++) 
Test-20141122_2058.ser
Test-20141123_1931.ser
Test-20141123_2157.ser