我已經習慣了Java 7和新的Files
類。Java中的臨時文件對Files.copy的AccessDeniedException NIO2
我正在寫一個小應用程序,它在某些時候必須替換文件的內容。 我使用了一個臨時文件,以避免在某些錯誤出現時擦除目標文件。但是,在執行實際複製時,我總是得到AccessDeniedException
。
這裏是我的代碼:
// Temporary file generation.
Path target = getCurrentConfigFile(); // Returns a path, works ok.
Path tempFile = Files.createTempFile("tempfile", null);
Files.write(tempFile, conf.getBytes(Charset.defaultCharset()), StandardOpenOption.WRITE);
// Actual copy.
Files.copy(tempFile, target, StandardCopyOption.REPLACE_EXISTING);
// Cleanup.
Files.delete(tempFile);
getCurrentConfigFile()
處理目標文件路徑創建:
(... generates various strings from configuration parameters)
return FileSystems.getDefault().getPath(all, these, various, strings);
當我執行的代碼,它是通過.bat
腳本,我得到兩個與錯誤一個標準的命令提示符或標高。 目標文件位於C:\temp\tests
,這是我用同一個Windows用戶創建的一個目錄。
看來問題在於從臨時文件讀取,因爲直接寫入目標文件。 我應該在哪裏看下?
作爲一個測試,你可以寫目標,而不是臨時? getCurrentConfigFile是做什麼的?也許它打開文件而不關閉它? – assylias
@assylias我編輯了我的問題,添加了關於'getCurrentConfigFile()'的細節。我不認爲它與此問題有關。直接寫入目標作品。也許我的try塊太寬了,問題在於讀取臨時文件。 –