我试图添加一个扩展名由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"扩展名.
在我看来,您想要做的就是更改所选文件的名称,而不是重命名文件系统上的文件。在这种情况下,您不使用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.txt,false如果重命名失败(例如test1.txt不存在,在另一个进程中打开,权限被拒绝等)
我会猜测您正在尝试的重命名失败,因为您正在尝试重命名目录(您正在使用JFileChooser带有DIRECTORIES_ONLY选项的 a )。如果您有程序使用此目录中的文件,或在其中打开命令提示符,他们将反对重命名此目录。