文件renameTo不起作用
我试图添加一个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”扩展名。
在我看来,您要做的就是更改所选文件的名称 ,而不是重命名文件系统上的文件。 在这种情况下,您不使用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
在这三行之后,如果文件test1.txt
可以重命名为test2.txt
,则成功,如果重命名不成功则为false
(例如, test1.txt
不存在,在另一个进程中打开,权限被拒绝,等等。)
我会猜测你正在尝试重命名是因为你试图重命名一个目录(你正在使用带有DIRECTORIES_ONLY
选项的JFileChooser
)。 如果您有使用此目录中的文件的程序,或者在其中打开命令提示符,则它们将反对重命名此目录。
您还可以使用Google Guava库中的Files.move
实用程序重命名文件。 它比编写自己的方法更容易。
来自文档:
将文件从一个路径移动到另一个路径。 此方法可以重命名文件或将其移动到其他目录,如Unix mv命令。
您正在写入错误的文件。 当您调用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); } }
如果要重命名文件,则必须关闭所有对象(如FileReader,FileWriter,FIS,FOSmeans关闭读取文件对象,然后重命名)