this.getClass().getResource(String) 路径问题

this.getClass().getResource(String) 路径问题    这里的默认当前路径是该类所在目录; this.getClass() 说明了一切!!java

                                                                           找到类,就找文件;很显然和类同一目录下web

                                                                           若是是在静态方法里,能够使用     类名.Class.getResource()app

this.getClass().getClassLoader().getResource(String)  这里的路径就是项目的根目录 src/main下的 或者编译好的classes 下的;getClassLoader()说明了一切 ! !webapp

                                                                           找到类,还得找到类的加载器,再找文件;很显然再根目录下maven

File f=new File(String);//路径问题和上述有点区别   这里默认当前路径是该工程下的第一层 与平时所说的src 在同一层工具

其实具体所指示的路径可能因为开发工具的相关配置而引发不一样,此时能够打印一下f的路径看看开发工具

  其实很简单:       测试

/images/j.jpg    
/a.txt

有斜杠 表示从 项目 根目录下找

   

images/j.jpg
a.txt 

无斜杠表示从当前 执行 文件夹下寻找

难点在于哪里是根目录,哪里是当前文件夹下。。。。。。是编译好的文件噢!!!!! 不必定 是当前编写的代码所在的文件。为何说不必定呢?

对于maven项目,根目录实际上是在target 文件夹下的classes 或 test-classes

对于maven的web项目其目录结构应以下
maven
--src
--main
--java (在运行时,其内容会被编译到target的classes下,紧适合放java代码)
--包A
--包B
--resources (在运行时,下面内容会被拷贝的target下,所以放一些资源文件)
--文件夹C
--图片X
--图片J
--webapp
--test



--target (运行或编译时候自动生成)
--classes
--包A
--包B
--问价夹C
--图片X
--图片J
           --test-classes

如上图:根目录就是指classes/ 或test-classes/

test与main下面的文件夹结构相似,都通常包含java、resource等

假如我在main/resources 下面的文件价夹下放置 图片.jpg;经过test/java/中的类可否使用呢?

答案是能够的:

本人测试结果以下:

首次编译执行test:

main/resources与 test/resources 内都有要使用的文件,则使用拷贝到test-classes/下的文件
                     main/resources有 test/resources 内没有,则使用拷贝到classes/下的文件           非初次编译运行时:                       假如我在第二次运行前删除了test-classes/下的文件 则他会去寻找classes/下的文件                     若都删除则会报错,找不到   文件同步机制:src ----> target  单向同步
相关文章
相关标签/搜索