[英]File renameTo does not work
我試圖添加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
這三條線后, success
將true
如果文件test1.txt
可重命名為test2.txt
,並且false
,如果重命名不成功(如test1.txt
不存在,是在另一個進程公開,許可被拒絕,等等。)
我猜測你正在嘗試重命名是因為你試圖重命名一個目錄(你正在使用帶有DIRECTORIES_ONLY
選項的JFileChooser
)。 如果您的程序使用此目錄中的文件,或者在其中打開命令提示符,則它們將反對重命名此目錄。
您正在寫入錯誤的文件。 當您調用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);
}
}
您還可以使用Google Guava庫中的Files.move
實用程序重命名文件。 它比編寫自己的方法更容易。
來自文檔:
將文件從一個路徑移動到另一個路徑。 此方法可以重命名文件或將其移動到其他目錄,如Unix mv命令。
如果要重命名文件,則必須關閉所有對象(如FileReader,FileWriter,FIS,FOSmeans關閉讀取文件對象,然后重命名)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.