2016-01-21 27 views
0

我試圖用自定義壓縮保存jpg圖像。因此,使用ImageWriter如下:如何自動爲ImageOutputStream創建丟失的文件夾?

ImageOutputStream os = new FileImageOutputStream(new File(filenamepath)); 

ImageWriter jpgWriter = ImageIO.getImageWritersByFormatName("jpg").next(); 
ImageWriteParam jpgWriteParam = jpgWriter.getDefaultWriteParam(); 
jpgWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); 
jpgWriteParam.setCompressionQuality(1f); 
jpgWriter.setOutput(os); 

問題:如果在filenamepath給出的文件夾已經存在,並拋出FileNotFoundException如果文件夾丟失的代碼纔有效。

問題:我該如何隱式讓作者創建目標文件夾?

回答

0

您需要先創建它。如果文件不存在,則FileImageOutputStream將不會創建該文件。

這可以很容易地使用Java NIO.2 APIFiles.createDirectory(dir)完成。這個方法檢查目錄是否已經存在,如果沒有,就創建它。

創建一個新目錄。檢查文件是否存在以及目錄的創建(如果該目錄不存在)是一個與所有其他可能影響該目錄的文件系統活動有關的原子操作。

如果你需要創建所有的父目錄,以及,你可以使用Files.createDirectories(dir)

先建立所有不存在的父目錄創建一個目錄。

示例代碼:

File.createDirectories(Paths.get(filenamepath)); 

請注意,這是一個更好的主意,使用Java API NIO.2代替舊createNewFile():您可以輕鬆地處理的權利給到創建的目錄。此外,它還迫使開發人員處理無法創建目錄的情況(並提供更多關於原因的信息,而不僅僅是truefalse,如createNewFile()情況)。

+0

這是否也適用於文件名路徑中的任何父級和子級目錄? – membersound

+0

@membersound在這種情況下,您可以使用createDirectories編輯。 – Tunaki

+0

好的,但是這種方法需要一個'Path',但我需要一個'File'對象來顯式提供'FileImageOutputStream'。那麼我不得不同時創建一個File和一個Path對象? – membersound