簡體   English   中英

文件renameTo不起作用

[英]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

這三條線后, successtrue如果文件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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM