今天在利用java写带附件的邮件发送功能的时候对于附件和图片的读取遇到了问题。
我用maven来开发项目,开始时在java目录下新建了source目录,把doc文件和png文件放在其中
尝试使用相对路径来读取图片
DataHandler dh = new DataHandler(new FileDataSource("../source/test.png"));
但报错无法读取资源
后来使用绝对路径,发现可以成功读取资源
查资料发现,maven项目打包发布后生成在target目录下,读取资源文件也是从该目录读取,检查target目录,发现source文件夹并没有被打包进来,自然也就读不到了。
资源文件通常应该放在resources目录下,即右下角像是小金币那个目录
我把两个文件放入resources目录中,重新打包,依然报错,发现两个文件并没有被打包到target/classes目录下,依然读不到
网上有人说可以在pom文件中配置来指定打包的resources文件
但这个对我并不起作用
后来看到了blog.csdn.net/yanguo110/a… 这篇文章,需要在project structure中的Artifacts下的项目classes文件夹下添加Directory Content,地址指向resource文件夹。因为 resource(s)目录也是classpath,打包之后和src目录一样,里面的文件都会放在classes目录下面。该方法成功解决了我的问题
首先右键项目,点击open module settings
点击Artifacts
点击+号,添加Directory Content,指向resources路径
这样的话,resources中的内容就可以成功打包到classes目录下,用如下语句即可读取路径
String urlImage = mailSend.class.getResource("/test.png").getPath();
System.out.println(urlImage);
DataHandler dh = new DataHandler(new FileDataSource(urlImage));