无法在maven项目的/ resources文件中使用FileOutputStream编写

时间:2017-12-19 17:21:40

标签: java maven io

在maven项目中,image.jpg文件夹enter image description here下有/resources个文件

当我尝试使用

检索文件时
private static File getImage(){
    ClassLoader classLoader = Db.class.getClassLoader();
    return new File(classLoader.getResource("image.jpg").getFile());
}

文件正常返回,但是当我尝试将此文件放入FileOutputStream中以编写一些新数据时,它无法正常工作

FileOutputStream fos = new FileOutputStream(getImage());
fos.write(blobImage.getBytes(1, (int)blobImage.length()));
fos.flush(); fos.close();

我没有错误,它只是无法写任何新内容,但如果我将FileOutputStream更改为此

FileOutputStream fos = new FileOutputStream( "C:\\...src\\main\\resources\\image.jpg");

它工作正常,图像变为blobImage文件中的任何内容。

1 个答案:

答案 0 :(得分:1)

这里:

private static File getImage(){
    ClassLoader classLoader = Db.class.getClassLoader();
    return new File(classLoader.getResource("image.jpg").getFile());
}

检索位于运行时类路径中的image.jpgtarget/classes而不是src/main/resouces

src/main/resouces是Maven构建期间使用的资源路径,而不是在运行时 执行process-resources Maven阶段后,位于src/main/resources的文件/文件夹将复制到target/classes

因此,在您进行更改后,图像实际上已更改,但哪一个位于target/classes

请注意,jar / war中打包的资源不是为了更改而设计的。您将获得锁定和缓存问题。如果可以更改资源,这些资源应位于组件外部:文件系统是图像的公平选择。