JavaEE中通过new File()和getResource()获取资源

本文探讨了在JavaEE程序中如何正确获取资源文件。通过Test类的getResource()方法和newFile()的区别,指出getResource()适用于查找类路径下的文件,而newFile()则在项目文件夹下寻找。由于IDEA的编译机制,src目录下的文件无法直接被运行时的.class文件访问。正确的做法是将资源文件放入resources目录,通过带斜杠的getResource(/)来获取。同时,建议将资源文件存放在resources目录以保证其在classes目录下有对应副本。

在javaEE程序中获取资源文件可以通过当前类的getResource()方法,或者是new File()获取资源。先看看这些方法获取文件的路径。

        这个案例里,Test类是在demo1目录下面。所以可以看到,class.getResource("")方法的获取目录是当前类的文件夹,也就是说可以获取和这个类放在一起的文件;而getResource("/"),在参数里以'/'开头,获取目录是在classes文件夹下,也就是所谓的根目录下;而new File()的获取目录是项目文件夹。

下面来做一点实践。

        这个是idea的项目目录,我在main文件夹下的几个不同位置放了a.txt,b.txt,c.txt,d.txt四个文件。那要怎么获取他们呢?如果按照之前的结论,a.txt和Test类在同一个文件夹下,可以用Test.getResource("a.txt")直接获取到,b.txt放在类的根目录下,应该可以用getResource("/b.txt")获取。

        但是经过实践,这样是根本获取不到文件的。原因也很简单,这个a.txt和b.txt都是在项目的src目录下的,里面只有未编译的.java文件。而我们实际执行.class文件都放在target文件夹里面,当然获取不到放在src文件夹里面的这些txt文件。仔细查看第一张图里的输出结果也能发现,获取的目录都是在target文件夹下的。

         于是去找target文件夹下的这个Test.class,可以看到这个demo1文件夹里面根本就没有a.txt,根目录classes文件夹下面也没有b.txt。

        那要怎样获取a.txt和b.txt文件呢?getResource()方法已经是不行了,它只能找target下面这个classes目录里的文件。于是需要用new File()的方式,new File() 是在项目文件夹下找,所以只要写new File("src/main/java/com/example/demo1/a.txt")就可以找到a.txt了,其他几个txt文件也都是一样的方式。当然这个方法显然不是很好啊,访问是访问得到,但是其实是和绝对路径差不多的,后期问题肯定是很多的。

        这就要讲到四个txt文件里最特殊的c.txt。它放在resource文件夹里面,事实上打开classes文件夹可以发现,idea自动拷贝了一份和resource下面一样的c.txt文件。

        事实上,resources文件夹里的所有文件都会原封不动复制一份到target的classes目录下面。所以资源文件最合理的存放位置应该是resources文件夹,然后读取文件的方式应该是用class.getResource("/"),这种开头带斜杠的用法。

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值