JAVA |
您所在的位置:网站首页 › 绝对路径和相对路径的概念是 › JAVA |
Java本质上只能使用绝对路径来寻找资源。所有的相对路径寻找资源的方法,都不过是API在底层帮助我们构建了绝对路径,从而找到资源的。 基本概念 绝对路径:从根目录为参考点的文件或文件夹(即目录)所在的路径,只存在一个,具有唯一性 * 本地系统的绝对路径 C:\xyz\test.txt 代表了test.txt文件的绝对路径 * URI形式的绝对资源路径 如, file:/D:/java/eclipse32/workspace/jbpmtest3/bin/aaa.b代表了一个URI绝对路径 http://www.sun.com/index.htm也代表了一个URL绝对路径 * 绝对路径的缺点 :在网页编程时,很少会使用绝对路径,如果使用“E:\book\网页布\代码\第2章\bg.jpg”来指定背景图片的位置,在自己的计算机上浏览可能会一切正常,但是上传到Web服务器上浏览就很有可能不会显示图片了。因为上传到Web服务器上时,可能整个网站并没有放在Web服务器的E盘, 有可能是D盘或H盘。即使放在Web服务器的E盘里,Web服务器的E盘里也不一定会存在“E:\book\网页布局\代码\第2章”这个目录,因此在浏览网页时是不会显示图片的。 * 获得当前classpath的绝对URI路径的方法 ClassName.class.getResource(“/”); 得到的是当前的classpath的绝对URI路径,这种方法“/”代表的是bin根目录 如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/ Thread.currentThread().getContextClassLoader().getResource(“”); 得到的也是当前classpath的绝对URI路径,这种方法“”代表的是bin根目录 如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/ ClassName.class.getClassLoader().getResource(“”); 得到的也是当前ClassPath的绝对URI路径。 如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/ ClassLoader.getSystemResource(“”) 得到的也是当前ClassPath的绝对URI路径。 如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/ * 获得某个类的绝对URI路径的方法 ClassName.class.getResource(“”); 得到的是当前类ClassName.class文件所在包的URI目录 如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/com/test/ 相对路径:相对于某个基准目录所推出目的文件或目录所在的路径,没有唯一性 * 在相对路径中,”. /” 代表当前目录,“../”代表上级目录 * 相对于classpath的相对路径 如对于test项目,file:/D:/java/eclipse32/workspace/test/bin/这个路径是本项目的classpath,所有的Java源文件编译后的.class文件复制到这个目录中,则相对路径是相对于file:/D:/java/eclipse32/workspace/test/bin/这个路径的路径。 推荐使用相对于当前classpath的相对路径 ClassLoader类的getResource(String path),getResourceAsStream(String path)等方法,使用相对于当前项目的classpath的相对路径来查找资源,读取属性文件常用到的ResourceBundle类的getBundle(String path)也是如此。 * 相对于当前用户目录的相对路径,即相对于System.getProperty(“user.dir”)返回路径的路径 对于一般项目,System.getProperty(“user.dir”)返回的路径是项目的根路径 对于Java EE服务器,System.getProperty(“user.dir”)返回的路径可能是服务器的某个路径,这个并没有统一的规范。所以,绝对不要使用“相对于当前用户目录的相对路径”。 注:默认情况下,java.io包中的类总是根据当前用户目录来分析相对路径名,此目录由系统属性user.dir指定,通常是Java虚拟机的调用目录。这就是说,在使用java.io包中的类时,最好不要使用相对路径。否则,虽然在J2SE应用程序中可能还算正常,但是到了J2EE程序中,一定会出问题!而且这个路径,在不同的服务器中都是不同的!
** 对于一般的JAVA文件,相对路径指的是相对JVM的启动路径 举个例子:假设有一JAVA源文件Example.java在D盘根目录下。我们进入命令行窗口,进入到D盘根目录下,然后用“javac Example.java”来编译此文件,编译无错后,会在D盘根目录下自动生成”Example.class”文件。我们再调用”java Example”来运行该程。此时我们已经启动了一个JVM,这个JVM是在D盘根目录下被启动的,所以此JVM所加载的程序中File类的相对路径也就是相对这个路径的,即D盘根目录D:\ ** JAVA IDE开发的项目中,相对路径指的是项目的根文件夹的路径。创建文件的写法是:File f = new File("src/com/lavasoft/res/a.txt"); 由于实际项目在打包后没有src目录,脱离了IDE环境,这个写法就是错误的 ** 对于JAVA WEB 以” /”开头的路径是相对WEB根目录的相对路径,不以” /”开头的路径的是相对当前路径的相对路径 绝对路径: 通过ServletContext.getRealPath(“/”)方法得到Web应用程序的根目录的绝对路径(JAVA SE不可用),这种方法以webroot为根目录,需从classes目录中读取文件 如:getServletContext().getRealPath("/WEB-INF/classes/test.txt"); 通过ClassLoader类的getResource(String 相对路径)方法获得当前classpath的绝对路径后拼资源的相对路径获得绝对路径 如:getClass().getClassLoader().getResource(“.”).toString(); |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |