我正在尝试为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”扩展名。
答案 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.txt
将test2.txt
false
,如果重命名不成功,则test1.txt
为JFileChooser
例如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关闭读取文件对象,然后重命名