簡體   English   中英

java file.renameTo()重命名文件但返回false。 為什么?

[英]java file.renameTo() does rename file but returns false. Why?

問題是我需要在我的邏輯的其余部分工作之前移動文件,所以當方法返回false時我停止執行。

但是,當我在Windows資源管理器中檢查文件時,它有一個新名稱並且它已移動。

只是好奇為什么會這樣。

這里是一些示例代碼,我只是試圖重新創建該問題。 它幾乎是一樣的,而且工作正常。

File testfile = new File("TestFile");

    if(!testfile.exists()){

        testfile.mkdirs();

    }

    File sample = new File("sample.txt");

    if(sample.exists()){

        boolean success = sample.renameTo(new File(testfile.getPath() + "\\" + sample.getName()));

        if(success){

            System.out.println("Moved");

        }
        else{

            System.out.println("Failed");

        }

    }

編輯:解決了它。 我很遺憾浪費每個人的時間來愚蠢的事情。 但是,我真的不認為如果不發表這篇文章,我會追蹤到這一點。

解決方案是我實際上是循環遍歷幾個文件來移動。 當輸出表示失敗然后程序停止,當我查看資源管理器時,只有第一個文件實際被移動,所以我認為它正在移動然后返回false。 然而,問題是我使用了錯誤的變量作為索引,所以發生的事情是它確實成功地在索引0中移動文件然后當循環重復索引沒有增加所以它試圖再次移動索引0因此失敗了。

就像我說的那樣,非常愚蠢,但感謝與我的關系。

Java的File.renameTo()是有問題的,特別是在Windows上,似乎。 正如API文檔所說:

此方法行為的許多方面本質上依賴於平台:重命名操作可能無法將文件從一個文件系統移動到另一個文件系統,它可能不是原子的,如果具有目標抽象路徑名的文件可能不會成功已經存在。 應始終檢查返回值以確保重命名操作成功。

您可以使用apache.commons.io庫,其中包括FileUtils.moveFile()或JDK 7中的Files.move()方法。

您的文件是否可能在某處打開但尚未關閉,因此重命名不起作用。 在關閉之前嘗試關閉與文件對象相關的所有打開的流。

這個對我有用

File file = new File("E:/Javadocs/" , "new.txt");   

File file1 = new File("E:/Javadocs/" , "myDoc.txt");          

file1.createNewFile();

if (file1.exists()){  
  System.out.println(file1.renameTo(file));
}

這將創建一個文件myDoc.txt並將其重命名為new.txt並將打印為true
我也嘗試使用File(URI)構造函數,它工作正常

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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