天天看點

巧妙地解決Java檔案重命名失敗的問題

一、問題描述

1、大家在用log4j時,可能會遇到下面的一個報錯資訊:

Failed to rename [/opt/proj.log] to [/opt/proj.log.2014-03-20].

這個算是log4j.DailyRollingFileAppender的一個BUG,網上很多修改方案,不過我能搜到的,都不理想。

2、一般性問題:檔案重命名失敗

詳細的内容可以參見論壇的文章:

關鍵内容如下:

我也遇到了和LZ相同的問題,也是無法重命名,但是可以先重命名,然後再執行其他操作!如果先執行其他的操作,比如讀這個檔案,然後再修改這個檔案名字,就無法重命名了,我先把代碼貼出來了,大家幫忙了啊!!

你這個隻是單純的為檔案重命名,沒進行其他的操作,現在的問題是,進行了其他的讀寫流之類的操作,然後重命名操作失敗了!隻是單純的重命名,大家都能成功的!!

二、解決方案

在我寫這篇文章之前,還沒有真正地有效解決這個問題。

我的解決方案是這樣的:

第一步:

先把原檔案copy一份,copy的那份就命名為要重命名的檔案。

比如proj.log,我拷貝一份,命名成proj.2014-03-20.log

第二步:

本來我的思路是這樣的:删除原proj.log,然後再建立一個proj.log

但是我發現,原proj.log檔案不但無法重命名,而且無法删除。

是以,我換了種思路:直接打開proj.log的輸入流,然後把它的檔案内容清空。

總結一下,變相的檔案重命名思路:直接上代碼,參見注釋。