当前位置:首页 > 全部子站 > IT > 思科认证

Java路径的分类与使用注意事项

来源:长理培训发布时间:2017-12-19 11:41:13

   Java路径简单的分可以分为两种:绝对路径和相对路径。下面介绍有关Java路径分类的一些细节,以及使用Java路径时需要注意的问题。

  具体而言,Java路径又分为四种

  一、URI形式的绝对资源路径如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/aaa.b URL是URI的特例。URL的前缀/协议,必须是Java认识的。URL可以打开资源,而URI则不行。 URL和URI对象可以互相转换,使用各自的toURI(),toURL()方法即可。

  二、本地系统的绝对路径 D:/java/eclipse32/workspace/jbpmtest3/bin/aaa.b Java.io包中的类,需要使用这种形式的参数。但是,它们一般也提供了URI类型的参数,而URI类型的参数,接受的是URI样式的String。因此,通过URI转换,还是可以把URI样式的绝对路径用在java.io包中的类中。

  三、相对于classpath的相对路径如:相对于 file:/D:/java/eclipse32/workspace/jbpmtest3/bin/这个路径的相对路径。其中,bin是本项目的 classpath。所有的Java源文件编译后的.class文件复制到这个目录中。

  四、相对于当前用户目录的相对路径就是相对于System.getProperty("user.dir")返回的路径。对于一般项目,这是项目的根路径。对于JavaEE服务器,这可能是服务器的某个路径。这个并没有统一的规范。所以,绝对不要使用"相对于当前用户目录的相对路径"。

  然而:默认情况下,java.io 包中的类总是根据当前用户目录来分析相对路径名。

  此目录由系统属性 user.dir 指定,通常是 Java 虚拟机的调用目录。

  这就是说,在使用java.io包中的类时,最好不要使用相对路径。否则,虽然在J2SE应用程序中可能还算正常,但是到了J2EE程序中,一定会出问题。而且这个路径,在不同的服务器中都是不同的。相对路径最佳实践推荐使用相对于当前classpath的相对路径因此,我们在使用相对路径时,应当使用相对于当前classpath的相对路径。

  ClassLoader类的getResource(String name),getResourceAsStream(String name)等方法,使用相对于当前项目的classpath的相对路径来查找资源。读取属性文件常用到的ResourceBundle类的 getBundle(String path)也是如此。通过查看ClassLoader类及其相关类的源代码,我发现,它实际上还是使用了URI形式的绝对路径。通过得到当前 classpath的URI形式的绝对路径,构建了相对路径的URI形式的绝对路径。(这个实际上是猜想,因为JDK内部调用了SUN的源代码,而这些代码不属于JDK,不是开源的。)相对路径本质上还是绝对路径因此,归根结底,Java本质上只能使用绝对路径来寻找资源。所有的相对路径寻找资源的方法,都不过是一些便利方法。不过是 API在底层帮助我们构建了绝对路径,从而找到资源的。 得到classpath和当前类的绝对路径的一些方法下面是一些得到classpath和当前类的绝对路径的一些方法。

  Java路径:你可能需要使用其中的一些方法来得到你需要的资源的绝对路径。

  1,FileTest.class.getResource("") 得到的是当前类FileTest.class文件的URI目录。不包括自己。如:file:/D: /java/eclipse32/workspace/jbpmtest3/bin/com/test/

  2,FileTest.class.getResource("/") 得到的是当前的classpath的绝对URI路径。如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/

  3,Thread.currentThread().getContextClassLoader().getResource("") 得到的也是当前ClassPath的绝对URI路径。如:file:/D: /java/eclipse32/workspace/jbpmtest3/bin/

  4,FileTest.class.getClassLoader().getResource("") 得到的也是当前ClassPath的绝对URI路径。如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/

  5,ClassLoader.getSystemResource("") 得到的也是当前ClassPath的绝对URI路径。如:file:/D: /java/eclipse32/workspace/jbpmtest3/bin/ 我推荐使用Thread.currentThread().getContextClassLoader().getResource("")来得到当前的classpath的绝对路径的URI表示法。 Web应用程序中资源的寻址上文中说过,当前用户目录,即相对于System.getProperty("user.dir")返回的路径。

  对于JavaEE服务器,这可能是服务器的某个路径,这个并没有统一的规范。

  而不是我们发布的Web应用程序的根目录。

  这样,在Web应用程序中,我们绝对不能使用相对于当前用户目录的相对路径。

  在Web应用程序中,我们一般通过ServletContext.getRealPath("/")方法得到Web应用程序的根目录的绝对路径。这样,我们只需要提供相对于Web应用程序根目录的路径,就可以构建出定位资源的绝对路径。这是我们开发Web应用程序时一般所采取的策略。

  通用的相对路径解决办法 Java中各种相对路径非常多,不容易使用,非常容易出错。因此,我编写了一个便利方法,帮助更容易的解决相对路径问题。

  Web应用程序中使用JavaSE运行的资源寻址问题在JavaSE程序中,我们一般使用classpath来作为存放资源的目的地。但是,在 Web应用程序中,我们一般使用classpath外面的WEB-INF及其子目录作为资源文件的存放地。在Web应用程序中,我们一般通过 ServletContext.getRealPath("/")方法得到Web应用程序的根目录的绝对路径。这样,我们只需要提供相对于Web应用程序根目录的路径,就可以构建出定位资源的绝对路径。

责编:罗莉

发表评论(共0条评论)
请自觉遵守互联网相关政策法规,评论内容只代表网友观点,发表审核后显示!

国家电网校园招聘考试直播课程通关班

  • 讲师:刘萍萍 / 谢楠
  • 课时:160h
  • 价格 4580

特色双名师解密新课程高频考点,送国家电网教材讲义,助力一次通关

配套通关班送国网在线题库一套

课程专业名称
讲师
课时
查看课程

国家电网招聘考试录播视频课程

  • 讲师:崔莹莹 / 刘萍萍
  • 课时:180h
  • 价格 3580

特色解密新课程高频考点,免费学习,助力一次通关

配套全套国网视频课程免费学习

课程专业名称
讲师
课时
查看课程
在线题库
面授课程更多>>
图书商城更多>>
在线报名
  • 报考专业:
    *(必填)
  • 姓名:
    *(必填)
  • 手机号码:
    *(必填)
返回顶部