簡體   English   中英

嘗試在Java中重命名文件不起作用(使用java.io.File.renameTo方法)

[英]Attempting to rename a File in Java does not work (using java.io.File.renameTo method)

我有一個加載文件,進行一些更改然后再次保存的方法。 但是,為了防止保存期間發生異常,我創建了一個新文件並首先保存到該文件(因為格式不正確的數據可能會在保存過程中導致異常)。 保存完成后,我將刪除原始文件,然后將新文件重命名為具有原始文件的名稱。

代碼本質上是這樣的:

MyDataClass.save(tempfile);
originalfile.delete();
tempfile.renameTo(originalfile);

method always returns 'false' and the new file (tempfile) remains with the random name it was created with (the original file is deleted). 問題在於,對方法的調用始終返回“ false”,並且新文件(臨時文件)將保留其創建時使用的隨機名稱(原始文件將刪除)。

任何人都懷疑為什么重命名失敗?

我猜這可能是由於程序無法檢查文件刪除的最新狀態。 您可以通過嘗試以下代碼來調試它:

MyDataClass.save(tempfile);
if(originalfile.delete()==true){
tempfile.renameTo(originalfile);
}
else{
System.out.println("File is not deleted");
}

或者您可以嘗試一下。

MyDataClass.save(tempfile);
originalfile.delete();
Thread.sleep(4000);//Make the thread sleep so that the recent status can be detected
tempfile.renameTo(originalfile);

另外,我看到您已經使用MyDataClass.save保存文件。 保存后請檢查是否關閉了文件。

如果您在嘗試重命名時文件被鎖定,則可能無法正常工作

另外,如果您使用Windows資源管理器查看文件,則可能需要刷新以查看最近創建的文件

請參閱Files.move以獲取更新的類Path,Paths和Files。

MyDataClass.save(tempfile);
Files.move(tempfile.toPath(), originalfile.toPath(),
    StandardCopyOption.REPLACE_EXISTING,
    StandardCopyOption.ATOMIC_MOVE);

當然,這假定save關閉了tempfile。

我終於找到了問題所在。 事實是,我使用的是Apache POI(Microsoft Excel庫),它不會像應有的那樣保存更新。 嘗試保存到現有文件會導致異常,因此我想先保存到第二個文件,然后刪除原始文件/重命名新文件。 事實證明,將其保存到新文件的行為也導致它保存到原始文件中!! 所以我只需要保存到一個臨時文件然后刪除它...

暫無
暫無

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

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