【问题标题】:How to increment the number within the file name each time a new file is created?每次创建新文件时如何增加文件名中的数字?
【发布时间】:2017-08-09 00:28:01
【问题描述】:

您好,我目前正在用 Java 编写一个方法,我正在尝试创建新文件,但我需要这些文件不是同名,而是递增名称值,如下所示:

  • /Users/Myself/Desktop/myFile0.xml
  • /Users/Myself/Desktop/myFile1.xml
  • /Users/Myself/Desktop/myFile2.xml
  • /Users/Myself/Desktop/myFile3.xml

所以我尝试在我的代码中执行以下操作,但我不明白为什么当我在 for each 循环中调用文件(创建一个新循环)时,数字不会增加?

public void pickFolder() throws Exception {

    chooserFolder.setDialogTitle("Specify your save location");
    chooserFolder.setDialogType(JFileChooser.SAVE_DIALOG);

    int numbers = 0;
    chooserFolder.setSelectedFile(new File("myFile" + numbers++ + ".xml"));
    chooserFolder.setFileFilter(new FileNameExtensionFilter("xml file", "xml"));

    int userSelection = chooserFolder.showSaveDialog(null);
    if (userSelection == JFileChooser.APPROVE_OPTION) {

        for (File file : files) {

            chooserFolder.setSelectedFile(new File(chooserFolder.getSelectedFile().getAbsolutePath()));


            fileToSave = chooserFolder.getSelectedFile();
            if (fileToSave.createNewFile()) {
                System.out.println("File is created!");
                fileToSave = chooserFolder.getSelectedFile();

            } else {
                JOptionPane.showMessageDialog(null, "File already exists.");
            }

            System.out.println("Save as file: " + fileToSave.getAbsolutePath());

        }

任何帮助将不胜感激,谢谢!

【问题讨论】:

    标签: java


    【解决方案1】:

    您的 numbers 变量应该是静态的;

    public static int numbers = 0;
    
    public void pickFolder() throws Exception {
    
    chooserFolder.setDialogTitle("Specify your save location");
    chooserFolder.setDialogType(JFileChooser.SAVE_DIALOG);
    
    chooserFolder.setSelectedFile(new File("myFile" + numbers++ + ".xml"));
    chooserFolder.setFileFilter(new FileNameExtensionFilter("xml file", "xml"));
    
    int userSelection = chooserFolder.showSaveDialog(null);
    if (userSelection == JFileChooser.APPROVE_OPTION) {
    
        for (File file : files) {
    
            chooserFolder.setSelectedFile(new File(chooserFolder.getSelectedFile().getAbsolutePath()));
    
    
            fileToSave = chooserFolder.getSelectedFile();
            if (fileToSave.createNewFile()) {
                System.out.println("File is created!");
                fileToSave = chooserFolder.getSelectedFile();
    
            } else {
                JOptionPane.showMessageDialog(null, "File already exists.");
            }
    
            System.out.println("Save as file: " + fileToSave.getAbsolutePath());
    
        }
    

    这样,每当您调用 pickFolder() 时,您要么创建一个新实例,要么使用相同的实例 - 您的 numbers 变量对于每个实例都保持相同。

    【讨论】:

    • 这也可能是真的,因为您会一次又一次地调用该方法,会将数字重置为零并从那里重新开始。使数字变量成为静态变量,同时也是类级别变量
    • 你的 getSelectedFile 方法是什么样的?
    • 并且在 "chooserFolder.setSelectedFile(new File("myFile" + numbers++ + ".xml"));" 之后行你可以添加“System.out.println(chooserFolder.getSelectedFile().getAbsolutePath();”打印语句给你什么?
    • getSelectedFile() 是 JFileChooser 的一种方法,打印语句给了我: /Users/Maiwand/IdeaProjects/BFC_GUI/myFile0.xml ,现在这对于创建第一个输出文件来说很好,但是我的问题是其余文件必须具有相同的路径,但只有 .xml 之前的数字才能递增。
    • 尝试多次调用pickFolder() 方法,检查打印语句是否在增加numbers 变量。如果变量正在递增,那么您应该怀疑您的 for 循环或文件列表有问题。
    【解决方案2】:

    那将是因为您将它附加到字符串“something”+1 将是 java 中的字符串连接。

    试试这样的:

    chooserFolder.setSelectedFile(new File("myFile" + (numbers++) + ".xml"));
    

    这将确保数字递增,然后替换为相应的值。

    【讨论】:

    • OP 发布的内容 ("myFile" + numbers++ + ".xml") 和您的答案 ("myFile" + (numbers++) + ".xml") 之间没有区别 - 它们具有相同的含义并且行为完全相同。 OP wants 字符串连接起来,所以你的答案的第一行没有多大意义。
    • 是的,我认为@arkantos 的答案似乎是正确的。不过谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 2013-08-01
    • 2014-01-17
    相关资源
    最近更新 更多