如何自动为ImageOutputStream创建丢失的文件夹?

时间:2016-01-21 10:33:17

标签: java javax.imageio

我正在尝试使用自定义压缩保存jpg张图片。因此,使用ImageWriter如下:

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

问题:如何隐式让作者创建目标文件夹?

1 个答案:

答案 0 :(得分:0)

您需要先创建它。如果文件不存在,FileImageOutputStream将无法创建该文件。

使用Java NIO.2 API Files.createDirectory(dir)可以轻松完成此操作。此方法检查目录是否已存在,如果不存在,则创建目录。

  

创建一个新目录。检查文件是否存在以及如果目录不存在则创建目录是针对可能影响目录的所有其他文件系统活动的原子操作。

如果您还需要创建所有父目录,可以使用Files.createDirectories(dir)

  

首先通过创建所有不存在的父目录来创建目录。

示例代码:

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

请注意,最好使用Java NIO.2 API而不是旧的createNewFile():您可以轻松处理为创建的目录提供的权限。此外,它强制开发人员处理无法创建目录的情况(并提供有关原因的更多信息,而不仅仅是{{1}中的truefalse案例)。