在maven项目中,我在image.jpg
folder/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
文件中的任何内容。
这里 :
private static File getImage(){
ClassLoader classLoader = Db.class.getClassLoader();
return new File(classLoader.getResource("image.jpg").getFile());
}
检索位于运行时类路径中的image.jpg
:target/classes
不在src/main/resouces
中。
src/main/resouces
是Maven构建期间使用的资源路径,而不是在运行时。
在process-resources
Maven阶段执行之后,位于src/main/resources
的文件/文件夹被复制到target/classes
。
因此,在您更改后,图像实际上已更改,但哪一个位于target/classes
。
请注意,jar / war中打包的资源不是为了更改而设计的。您将获得锁定和缓存问题。如果可以更改资源,这些资源应位于组件外部:文件系统是图像的公平选择。