Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何让ImageIO.write根据需要创建文件夹路径_Java_File_Filepath_Javax.imageio - Fatal编程技术网

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

Java 如何让ImageIO.write根据需要创建文件夹路径,java,file,filepath,javax.imageio,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\不存在,因此我得

我有以下代码:

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\
不存在,因此我得到一个异常抛出消息:
(系统找不到指定的路径)

如何让ImageIO自动创建路径,或者使用什么方法自动创建路径


在这段代码的早期版本中,我使用FileUtils.copyFile保存图像(以文件对象的形式),这将自动创建路径。我怎样才能用这个复制它?我可以再次使用FileUtils.copyFile,但我不知道如何将BuffereImage对象“转换”为File对象。

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

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

File outputFile = new File(nameAndPath);
outputFile.getParentFile().mkdirs();
ImageIO.write(image, "png", outputFile);
警告:如果输出文件是当前工作目录,则
getParentFile()
可能返回
null
,具体取决于路径和操作系统,因此在调用mkdirs()之前,您应该检查null

另外,
mkdirs()
是一个旧方法,如果出现问题,它不会抛出任何异常,相反,如果成功,它将返回一个
布尔值,如果出现问题或目录已经存在,则返回false,因此如果您想彻底检查

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

您可以通过调用其父级来创建路径:

创建以此抽象路径名命名的目录,包括任何必要但不存在的父目录


很好,我刚刚添加了一些额外的错误检查,您可能应该这样做
File child = new File("C:\\example\\folder\\filename.png");
new File(child.getParent()).mkdirs();