[英]Unable to write with FileOutputStream in a /resources file in maven project
在一个Maven项目中,我在/resources
文件夹下有一个image.jpg
文件。
当我尝试使用检索文件时
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中的资源并非旨在更改。 您将遇到锁定和缓存问题。 如果可以更改资源,则这些资源应位于组件之外:文件系统是图像的合理选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.