文件renameTo不起作用

时间:2012-04-01 18:00:11

标签: java jfilechooser

我正在尝试为JFileChooser选择的文件名添加扩展名,但我无法让它工作。

这是代码:

final JFileChooser fc = new JFileChooser();
        fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        int returnVal = fc.showSaveDialog(null);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            File f = fc.getSelectedFile();
            String name =f.getAbsoluteFile()+".txt";
            f.renameTo(new File(name));
            FileWriter fstream;
            try {
                fstream = new FileWriter(f);
                BufferedWriter out = new BufferedWriter(fstream);
                out.write("test one");
                out.close();
            } catch (IOException ex) {
                Logger.getLogger(AppCore.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

我无法弄清楚为什么这不起作用。我也尝试使用getPath()和getCanonicalPath(),但结果是一样的。该文件是在所选目录中创建的,但没有“.txt”扩展名。

4 个答案:

答案 0 :(得分:4)

在我看来,您想要做的就是更改所选文件的名称,而不是重命名文件系统上的文件。在这种情况下,您不使用File.renameTo。您只需更改File即可。以下内容应该有效:

        File f = fc.getSelectedFile();
        String name = f.getAbsoluteFile()+".txt";
        f = new File(name);

File.renameTo尝试重命名文件系统上的文件。例如:

File oldFile = new File("test1.txt");
File newFile = new File("test2.txt");
boolean success = oldFile.renameTo(newFile); // renames test1.txt to test2.txt

如果文件success可以重命名为true,则test1.txttest2.txt false,如果重命名不成功,则test1.txtJFileChooser例如DIRECTORIES_ONLY不存在,在另一个过程中打开,许可被拒绝等等。)

我猜测你正在尝试重命名是因为你试图重命名一个目录(你正在使用带有{{1}}选项的{{1}})。如果您的程序使用此目录中的文件,或者在其中打开命令提示符,则它们将反对重命名此目录。

答案 1 :(得分:1)

您还可以使用Google Guava库中的Files.move实用程序重命名文件。它比编写自己的方法更容易。

来自文档:

  

将文件从一个路径移动到另一个路径。此方法可以重命名文件或将其移动到其他目录,如Unix mv命令。

答案 2 :(得分:0)

您正在写错文件。当您调用renameTo时,当前文件不会更改其路径。试试这个:

final JFileChooser fc = new JFileChooser();
    fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    int returnVal = fc.showSaveDialog(null);
    if (returnVal == JFileChooser.APPROVE_OPTION) {
        File f = fc.getSelectedFile();
        String name =f.getAbsoluteFile()+".txt";
        File f2 = new File(name);
        f.renameTo(f2);
        FileWriter fstream;
        try {
            fstream = new FileWriter(f2);
            BufferedWriter out = new BufferedWriter(fstream);
            out.write("test one");
            out.close();
        } catch (IOException ex) {
            Logger.getLogger(AppCore.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

答案 3 :(得分:0)

如果要重命名文件,则必须关闭所有对象(如FileReader,FileWriter,FIS,FOSmeans关闭读取文件对象,然后重命名