在 Java 中创建具有不同名称的新文本文件

Create New Text Files with Different Names in Java

每次执行代码时,我都希望创建一个新的文本文件。

文本文件应命名为 Person1。

下次执行代码时,文本文件应命名为 Person2。

那么文本文件应该再次命名为 Person3。等等等等....

目前,我可以创建一个名为 "Person1" 的文本文件,但无法创建另一个名为 "Person2".

的文本文件
private int fileNumber = 1;
fileNumber = fileNumber++;

public static void main(String[] args) {
        try {
            FileWriter fw = new FileWriter("Person" + fileNumber + ".txt");
            PrintWriter pw = new PrintWriter(fw);

            pw.println("Hello you created a text file");

            pw.close();
        }
        catch (IOException e)
        {
            System.out.println("Error!");

        }
}

创建新文件时,您应该检查具有fileNumberindex的文件是否已经存在。 虽然 具有这样index 的文件存在,但index 应该递增。最后,您创建了一个 index 不存在的新文件。

假设您创建了一个文件的抽象表示,现在想将其重命名为第一个可用的 index。假设其他文件位于 C:\tmp:

File newFile;

int index = 1;
String parent = "C:\tmp"
String name = "Person";
while ((newFile = new File(parent, name + index)).exists()) {
    index++;
}

/* Here you have a newFile with name set to the first available index */

或者,如果您想考虑延期:

File newFile;

int index = 1;
String parent = "C:\tmp"
String name = "Person";
String extension = ".txt";
while ((newFile = new File(parent, name + index + extension)).exists()) {
    index++;
}

/* Here you have a newFile with name set to the first available index and extension */

UPDATE:使用 Java 8 NIO API,我创建了以下方法 return a Path 文件系统上尚不存在的第一个可用路径的对象:

/**
 * Returns the first available {@code Path} with a unique file name. The
 * first available path means that, if a file with the specified
 * <tt>path</tt> exists on disk, an index is appended to it. If a file with
 * that path still exists, index is incremented and so on, until a unique
 * path is generated. This path is then returned.
 * <p>
 * If a file with the specified <tt>path</tt> does not exist, this method
 * trivially returns <tt>path</tt>.
 * <p>
 * For an example, if the parent directory of the specified path already
 * contains <tt>file.txt</tt>, <tt>file-0.txt</tt> and <tt>file-1.txt</tt>,
 * and the file name of this path is <tt>file.txt</tt>, then a path with
 * file name <tt>file-2.txt</tt> is returned.
 * 
 * @param path path from which the first available is returned
 * @return a path with a unique file name
 */
public static Path firstAvailable(Path path) {
    if (!Files.exists(path))
        return path;

    int namingIndex = 0;
    String name = path.getFileName().toString();
    String extension = "";

    int dotIndex = name.lastIndexOf('.');
    if (dotIndex > 0) {
        extension = name.substring(dotIndex);
        name = name.substring(0, dotIndex);
    }
    name += "-";

    while (Files.exists(path)) {
        path = path.resolveSibling(name + namingIndex + extension);
        namingIndex++;
    }
    return path;
}

检查文件。如果存在则增加索引

File file = new File("E:\" + "Person1" + ".txt");
int increase=1;
while(file.exists()){
     increase++;
     file = new File("E:\" + "Person" + increase+ ".txt");
} 
if(!file.exists()) {
   try {

    String content = textfile.toString();
    file.createNewFile();

    FileWriter fw = new FileWriter(file.getAbsoluteFile());
    BufferedWriter bw = new BufferedWriter(fw);
    bw.write(content);
    bw.close();

    System.out.println("Done");

}catch (IOException e){
   }

根据您的程序执行情况,有两种不同的方法可以做到这一点。如果你想保留程序 运行ning 并在其中调用该函数,那么你可以保留最后生成的文件编号并递增 1。例如,你最后生成的文件名为 Person4,所以,下一个通过增加变量的数量将是 Person5。但是如果你想运行程序每次都从头开始,那么你必须读取已经写入目录的索引。当你从目录中读取文件名时,你可以使用 substring(5, index.length) 来给你数字。然后为下一个文件递增该数字。

试试这个。只需更改 for 循环中的 i 值即可创建您需要的文件数量

File file;    

for (int i = 21; i < 32; i++) {        
    file = new File("Practica" + Integer.toString(i) + ".java");
    try {
        file.createNewFile();
    } catch (Exception e) {}
}
    try {
        int index= 0;
        File file = new File("folder\" + "filename" + ".txt");
        while (file.exists()) {
            index++;
            file = new File("folder\" + "filename" + index + ".txt");
        }
        if (!file.exists()) {
            // create file
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

}