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

问题描述 投票:0回答:1

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

当我尝试使用检索文件时

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文件中的任何内容。

java maven io
1个回答
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中打包的资源不是为了更改而设计的。您将获得锁定和缓存问题。如果可以更改资源,这些资源应位于组件外部:文件系统是图像的公平选择。

© www.soinside.com 2019 - 2024. All rights reserved.