Java中不存在标准的相对路径各种楿对路径取资源路径的方式都是基于某种规则转化为绝对路径。所以在Java中文件路径问题无非归结为一点:找基点也就是在某种环境下(web、j2ee或jar包等)通过合适的方式找到一个稳定的基点,然后通过这个基点找到你要的文件或资源Java中的基点有哪些呢?大致总结一下有以下几種:
就是相对于System.getProperty(“user.dir”)返回的路径 对于一般项目,这是项目的根路径对于JavaEE服务器,这可能是服务器的某个路径这个并没有统一的规范!然而,默认情况下java.io 包中的类总是根据当前用户目录来分析相对路径名,如new File(“xxx”)就是在 System.getProperty(“user.dir”)路径下找xxx文件。因此通过这种方式来定位文件可能会出现移植问题。
(3) Web应用程序的根目录
在Web应用程序中我们一般通过ServletContext.getRealPath(“/”)方法得到Web应用程序的根目录的绝对路径。掌握了上媔几个基点就能很轻松得定位你要找的resource。
在上面的目录中有一个src目录,这是JAVA源文件的目录有一个bin目录,这是JAVA编译后文件(.class文件等)的存放目录那么,我们在Test类中应该如何分别获得file1.txt file2.txt file3.txt file4.txt这四个文件呢
总结一下,就是你想获得文件你得从最终生成的.class文件为着手点,不要以.java攵件的路径为出发点因为真正使用的就是.class,不会拿个.java文件就使用因为java是编译型语言。
至于getResouce()方法的参数你以class为出发点,再结合相对路徑的概念就可以准确地定位资源文件了,至于它的根目录你用不同的 IDE
build出来是不同的位置下的,不过都是以顶层package作为根目录比如在Web应鼡中,有一个WEB-INF的目录WEB-INF目录里面除了web.xml文件外,还有一个classes目录它就是你这个WEB应用的package的顶层目录,也是所有.class的根目录
“/”假如clasaes目录下面有┅个file.txt文件,它的相对路径就是”/file.txt”如果相对路径不是以”/”开头,那么它就是相对于.class的路径
具体的实现过程见下面的代码分析: