我們有個功能會透過web上傳到壓縮檔到server side,接著解壓縮,最後將解壓縮的資料夾移動到某個目錄。某天發現這個功能會隨機發生移動失敗的問題,最早我使用的API像這樣:
File src = new File("src"); File dest = new File("dest"); boolean result = src.renameTo(dest);然而這種作法只能知道成功或失敗,並無法知道原因;因此我將做法改為:
File src = new File("src"); File dest = new File("dest"); try { Files.move(src, dest); } catch( Exception e ) { // handle exception }最後接到一個沒有原因的AccessDeniedException。
我做過以下推測與實驗:
我在想會不會是JDK的bug,結果發現有人說: 可能是防毒軟體搞的鬼。於是我又做了以下實驗:
這只是一個可能性,並不是絕對的。最後有幾種解決方式(workaround):