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

在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("/"),这种开头带斜杠的用法。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值