在maven项目中,image.jpg
文件夹下有/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
文件中的任何内容。
答案 0 :(得分:1)
这里:
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中打包的资源不是为了更改而设计的。您将获得锁定和缓存问题。如果可以更改资源,这些资源应位于组件外部:文件系统是图像的公平选择。