文件renameTo不起作用

Gia*_*nis 8 java jfilechooser

我试图添加一个扩展名由a选择的文件的名称,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);
            }
        }
Run Code Online (Sandbox Code Playgroud)

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

Luk*_*ard 6

在我看来,您想要做的就是更改所选文件的名称,而不是重命名文件系统上的文件。在这种情况下,您不使用File.renameTo. 您只需更改File. 像下面这样的东西应该工作:

        File f = fc.getSelectedFile();
        String name = f.getAbsoluteFile()+".txt";
        f = new File(name);
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

在这三行之后,success将是true文件test1.txt是否可以重命名为test2.txtfalse如果重命名失败(例如test1.txt不存在,在另一个进程中打开,权限被拒绝等)

我会猜测您正在尝试的重命名失败,因为您正在尝试重命名目录(您正在使用JFileChooser带有DIRECTORIES_ONLY选项的 a )。如果您有程序使用此目录中的文件,或在其中打开命令提示符,他们将反对重命名此目录。