JavaResource路径整理总结
Java Resource路径
⾸先⼀点很重要,Java中不存在标准的相对路径,各种相对路径取资源的⽅式都是基于某种规则转化为绝对路劲
然后⼀点也很重要,绝对不要直接使⽤绝对路径,否则死得很难看
基于以上两点,总结Resource路径问题⽆⾮归结为⼀点:基点,也就是在某种环境下(web、j2ee或jar包等)通过合适的⽅式到⼀个稳定的基点,然后通过这个基点到你要的resource
Java中的基点有哪些呢?⼤致总结⼀下有以下⼏种:
1)classpath
如果你要的资源在classpath下,那么通过classpath这个基点是⽐较合适的,⽽取得这个基点⽅式主要是通过ClassLoader 来,具体⽅法就是 Resource(String name),⽽取得ClassLoader的⽅式很多,⽐如:
1. Thread.currentThread().getContextClassLoader()
java做什么的
2. ClassLoader()
3. ClassLoader. getSystemClassLoader()
ClassLoaderresource的实现原理就是先递归在parent classLoader中从所在classpath⾥加载resource(最终如何加载JDK 未开源),如果所有层级的classLoader都未到,则调⽤findResource⽅法来,⽽这个⽅法是暴露给⾃制classLoader来现实的,因此给了在classpath之外加载resource的机会。
2)当前⽤户⽬录
就是相对于Property("user.dir" )返回的路径,对于⼀般项⽬,这是项⽬的根路径。对于JavaEE服务器,这可能是服务器的某个路径。这个并没有统⼀的规范!然⽽,默认情况下,java.io 包中的类总是根据当前⽤户⽬录来分析相对路径名,如new File("xxx"),就是在 Property("user.dir" )路径下xxx⽂件。因此,通过这种⽅式来定位⽂件可能会出现移植问题。
3) Web应⽤程序的根⽬录
在Web应⽤程序中,我们⼀般通过RealPath("/" )⽅法得到Web应⽤程序的根⽬录的绝对路径。
掌握了上⾯⼏个基点,就能很轻松得定位你要的resource,只不过要清晰地认识到不要只图⼀时快活,⽽不管将来移植的死活,要确保能任何环境下(j2se or web,windows or Linux)不出问题。
感谢阅读,希望能帮助到⼤家,谢谢⼤家对本站的⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。