如何让ImageIO.write根据需要创建文件夹路径

时间:2015-06-17 19:52:06

标签: java file filepath javax.imageio

我有以下代码:

String nameAndPath = "C:\\example\\folder\\filename.png";

BufferedImage image = addInfoToScreenshot(); //this method works fine and returns a BufferedImage

ImageIO.write(image, "png", new File(nameAndPath));

现在,路径C:\example\folder\不存在,因此我抛出了一条消息:(The system cannot find the path specified)

如何让ImageIO自动创建路径,或者我可以使用哪种方法自动创建路径?

在此代码的先前版本中,我使用FileUtils.copyFile来保存图像(以File对象的形式),这将自动创建路径。我怎么能用这个复制呢?我可以再次使用FileUtils.copyFile,但我不知道我将如何"转换"将BufferedImage对象转换为File对象。

2 个答案:

答案 0 :(得分:3)

你必须自己创建缺少的目录

如果您不想使用第三方库,可以在输出文件的目录中使用File.mkdirs()

File outputFile = new File(nameAndPath);
outputFile.getParentFile().mkdirs();
ImageIO.write(image, "png", outputFile);

警告getParentFile()如果输出文件是当前工作目录,则可能返回null,具体取决于路径是什么以及您使用的操作系统,因此在调用mkdirs()之前应该检查为null

同样mkdirs()是一种旧方法,如果出现问题则不会抛出任何异常,如果成功则返回boolean,如果出现问题则返回false或者如果目录已经存在,那么如果你想彻底......

 File parentDir = outputFile.getParentFile();
 if(parentDir !=null && ! parentDir.exists() ){
    if(!parentDir.mkdirs()){
        throw new IOException("error creating directories");
    }
 }
 ImageIO.write(image, "png", outputFile);

答案 1 :(得分:0)

您可以通过在其父级上调用File#mkdirs来创建路径:

  

创建此抽象路径名所指定的目录,包括任何必要但不存在的父目录...

File child = new File("C:\\example\\folder\\filename.png");
new File(child.getParent()).mkdirs();