我有以下代码:
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对象。
答案 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();