`

相对路径和绝对路径的区别,java获取项目访问路径的方法

    博客分类:
  • Java
阅读更多

相对路径和绝对路径的区别

在HTML里只要涉及文件的地方(如超级链接、图片等)就会涉及绝对路径与相对路径的概念。

1.绝对路径
    绝对路径是指文件在硬盘上真正存在的路径。例如“bg.jpg”这个图片是存放在硬盘的“E:\book\网页布局代码\第2章”目录下,那么 “bg.jpg”这个图片的绝对路径就是“E:\book\网页布\代码\第2章\bg.jpg"。那么如果要使用绝对路径指定网页的背景图片就应该使用 以下语句:
<body backround="E:\book\网页布局\代码\第2章\bg.jpg" >

  2.使用绝对路径的缺点
   事实上,在网页编程时,很少会使用绝对路径,如果使用“E:\book\网页布\代码\第2章\bg.jpg”来指定背景图片的位置,在自己的计算机上 浏览可能会一切正常,但是上传到Web服务器上浏览就很有可能不会显示图片了。因为上传到Web服务器上时,可能整个网站并没有放在Web服务器的E盘, 有可能是D盘或H盘。即使放在Web服务器的E盘里,Web服务器的E盘里也不一定会存在“E:\book\网页布局\代码\第2章”这个目录,因此在浏 览网页时是不会显示图片的。

  3.相对路径
    为了避免这种隋况发生,通常在网页里指定文件时,都会选择使用相对路径。所谓相对路径,就是相对于自己的目标文件位置。例如上面的例子,“s1.htm” 文件里引用了“bg.jpg”图片,由于“bg.jpg”图片相对于“s1.htm”来说,是在同一个目录的,那么要在“s1.htm”文件里使用以下代 码后,只要这两个文件的相对位置没有变(也就是说还是在同一个目录内),那么无论上传到Web服务器的哪个位置,在浏览器里都能正确地显示图片。
      <body background="bg.jpg">
再 举一个例子,假设“s1.htm”文件所在目录为“E:\book\网页布局\代码\第2章”,而“bg.jpg”图片所在目录为“E:\book\网页 布局\代码\第2章\img”,那么“bg.jpg”图片相对于“s1.htm”文件来说,是在其所在目录的“img”子目录里,则引用图片的语句应该 为:
      <body background="img/bg.jpg"> 

    注意:相对路径使用“/”字符作为目录的分隔字符,而绝对路径可以使用“\”或“/”字符作为目录的分隔字符。由于“img”目录是“第2章”目录下的子目录,因此在“img”前不用再加上“/”字符。
在 相对路径里常使用“../”来表示上一级目录。如果有多个上一级目录,可以使用多个“../”,例如“http://www.cnblogs.com/”代表上上级目录。假设 “s1.htm”文件所在目录为“E:\book\网页布局\代码\第2章”,而“bg.jpg”图片所在目录为“E:\book\网页布局\代码”,那 么“bg.jpg”图片相对于“s1.htm”文件来说,是在其所在目录的上级目录里,则引用图片的语句应该为:
      <body background="../bg.jpg"> 

  再举一个例子,假设“s1.htm”文件所在目录为“E:\book\网页布局\代码\第2章”,而“bg.jpg”图片所在目录为“E:\book\网 页布局\代码\img”,那么“bg.jpg”图片相对于“s1.htm”文件来说,是在其所在目录的上级目录里的“img”子目录里,则引用图片的语句 应该为:
      <body background="../img/bg.jpg"> 

4.相对虚拟目录
有关相对路径还有一个比较特殊的表示:“相对虚拟目录”。请看下面的例子:
      <body background="/img/bg.jpg"> 

  在这个例子里,background属性的值为“/img/bg.jpg”,注意在“img”前有一个“/”字符。这个“/”代表的是虚拟目录的根目录. 假设把“E:\book\网页布局\代码”设为虚拟目录,那么“/img/bg.jpg”的真实路径为“E:\book\网页布局\代码\img \bg.jpg”;如果把“E:\book\网页布局\代码\第2章”设为虚拟目录,那么“/img/bg.jpg”的真实路径为“E:\book\网页 布局\代码\第2章\img\bg.jpg”

在jsp和class文件中调用的相对路径不同。

在jsp里,根目录是WebRoot 在class文件中,根目录是WebRoot/WEB-INF/classes 当然你也可以用System.getProperty("user.dir")获取你工程的绝对路径。

1.jsp中取得路径:
以工程名为TEST为例:
(1)得到包含工程名的当前页面全路径:request.getRequestURI()
结果:/TEST/test.jsp
(2)得到工程名:request.getContextPath()
结果:/TEST
(3)得到当前页面所在目录下全名称:request.getServletPath()
结果:如果页面在jsp目录下 /TEST/jsp/test.jsp
(4)得到页面所在服务器的全路径:application.getRealPath("页面.jsp")
结果:D:\resin\webapps\TEST\test.jsp
(5)得到页面所在服务器的绝对路径:absPath=new java.io.File(application.getRealPath(request.getRequestURI())).getParent();
结果:D:\resin\webapps\TEST

2.在类中取得路径:
(1)类的绝对路径:Class.class.getClass().getResource("/").getPath()
结果:/D:/TEST/WebRoot/WEB-INF/classes/pack/
(2)得到工程的路径:System.getProperty("user.dir")
结果:D:\TEST

3.在Servlet中取得路径:
(1)得到工程目录:request.getSession().getServletContext().getRealPath("") 参数可具体到包名。
结果:E:\Tomcat\webapps\TEST
(2)得到IE地址栏地址:request.getRequestURL()
结果:http://localhost:8080/TEST/test
(3)得到相对地址:request.getRequestURI()
结果:/TEST/test

另,Class类还有一个getResourceAsStream方法,记得以前有个项目要读取在同一个包内的一个xml,就用的这个。

1.如何获得当前文件路径

常用:
(1).Test.class.getResource("")
得到的是当前类FileTest.class文件的URI目录。不包括自己!
(2).Test.class.getResource("/")
得到的是当前的classpath的绝对URI。
(3).Thread.currentThread().getContextClassLoader().getResource("")
得到的也是当前ClassPath的绝对URI。
(4).Test.class.getClassLoader().getResource("")
得到的也是当前ClassPath的绝对URI。
(5).ClassLoader.getSystemResource("")
得到的也是当前ClassPath的绝对URI。
尽量不要使用相对于System.getProperty("user.dir")当前用户目录的相对路径,后面可以看出得出结果五花八门。
(6) new File("").getAbsolutePath()也可用。

注:若这些路径中出现空格,并且空格被 代替,则可以使用path = java.net.URLDecoder.decode(path,"utf-8") 进行转化;
      
2.Web服务器
(1).Tomcat
在类中输出System.getProperty("user.dir");显示的是%Tomcat_Home%/bin
(2).Resin
不是你的JSP放的相对路径,是JSP引擎执行这个JSP编译成Servlet的路径为根.比如用新建文件法测试File f = new File("a.htm");
这个a.htm在resin的安装目录下
(3).如何读文件
使用ServletContext.getResourceAsStream()就可以
(4).获得文件真实路径

String   file_real_path=ServletContext.getRealPath("mypath/filename"); 
不建议使用request.getRealPath("/");
分享到:
评论

相关推荐

    java项目相对路径与绝对路径问题分析

    4. `FileTest.class.getClassLoader().getResource("")`:再次,这个方法也用于获取当前ClassPath的绝对URI路径,路径结果和之前的一致。 5. `ClassLoader.getSystemResource("")`:这个方法返回的是系统类加载器的...

    java中File的相对路径与绝对路径总结

    ### Java中File的相对路径与绝对路径总结 在Java Web开发过程中,经常需要处理文件的读写操作,尤其是在运行时获取配置文件、动态加载对象等情况。对于这些需求,理解和掌握文件的相对路径与绝对路径至关重要。 ##...

    Java相对路径总结

    本文将深入探讨Java中的相对路径,这是在处理文件和目录时经常会遇到的一个关键主题。相对路径是相对于当前工作目录或某个已知起点的文件或目录的路径表示方式,与绝对路径(完整描述文件或目录位置的路径)相比,...

    java获取路径的各种方法

    本文将详细介绍Java中获取路径的几种方法,以及相对路径和绝对路径的基本概念。 首先,理解绝对路径和相对路径的概念至关重要。绝对路径是文件或目录在硬盘上的完整路径,无论起点在哪里都能准确地指向目标。例如,...

    java 获取项目文件路径实现方法

    在实际应用中,为了增强代码的可移植性和适应性,建议使用相对路径或者配置文件来存储需要访问的文件路径,而不是硬编码绝对路径。 此外,如果你需要获取项目的根目录,特别是对于桌面应用,可以考虑使用`System....

    总结一下java获取路径几种途径

    Java中使用的路径主要分为绝对路径和相对路径两种,其中绝对路径又细分为URI形式的绝对资源路径和本地系统的绝对路径。相对路径则包括相对于classpath的相对路径和相对于当前用户目录的相对路径。 - **URI形式的...

    Java中获取文件路径的几种方式

    理解如何在Java中获取文件路径,特别是区分绝对路径和相对路径,对于构建稳定、可移植的应用程序至关重要。本文将深入探讨Java中获取文件路径的多种方法,以及这些方法背后的原理。 ### 一、Java中的路径类型 ####...

    Java路径问题最终解决方案之一.

    Java中使用的路径主要分为两类:绝对路径和相对路径。具体来说,这两种路径又有以下四种表现形式: 1. **URI形式的绝对资源路径**:例如 `file:/D:/java/eclipse32/workspace/jbpmtest3/bin/aaa.b`。URL是URI的一个...

    java读取项目中的文件(src目录下)

    4. **相对路径和绝对路径**: - 在Java中读取文件时,可以使用相对路径或绝对路径。如果文件在`src`目录下,且你的代码在同一目录层次,可以使用相对路径。否则,可能需要使用绝对路径,或者利用类路径的特性。 5....

    文件写入,项目相对路径,java反射,模板数据写入

    本项目涉及的关键知识点主要包括文件写入、项目相对路径、Java反射以及模板数据写入。这些技术都是构建复杂应用时不可或缺的部分。 首先,我们要了解文件写入。在Java中,我们可以使用`java.io`包下的`FileWriter`...

    Java获得某个路径下的所有文件列表,并写入指定文件

    在Java编程中,获取某个路径下所有文件列表并将其写入指定文件是一项常见的任务,尤其在文件管理和系统操作中非常实用。以下是如何实现这个功能的详细步骤和相关知识点。 首先,我们需要导入Java.io和java.nio.file...

    struts2文件下载/绝对路径+相对路径

    3. **文件路径处理**:文件路径分为绝对路径和相对路径。绝对路径是从根目录开始的完整路径,而相对路径是相对于当前工作目录的路径。在处理文件下载时,开发者需要确保提供的是正确的文件路径。对于绝对路径,它...

    Java路径问题最终解决方案之一.txt

    尽管这是一种猜想,但可以确认的是,Java本质上只能使用绝对路径来查找资源,所有相对路径的方法本质上都是API帮助构建了绝对路径。 #### 四、获取`classpath`和当前类的绝对路径 以下是一些用于获取`classpath`和...

    linux中java获取路径的实例代码

    Linux环境下使用Java获取路径涉及几个关键的概念和知识点,包括路径的表示方式、相对路径与绝对路径的区别、获取系统属性以及使用File类进行文件操作等。 首先,Linux系统中的路径分隔符是正斜杠("/"),例如,"cd /...

    Java路径问题最终解决方案.doc

    在Java中,路径分为绝对路径和相对路径,这两种路径又有不同的表现形式。 一、URI形式的绝对资源路径 例如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/aaa.b 这是一个URI(Uniform Resource Identifier)...

    Java 访问注册列表 读软件安装路径

    1. 首先,需要将 registry.jar 文件添加到项目的类路径中。 2. 然后,需要将 ICE_JNIRegistry.dll 文件添加到 Java 的 bin 目录下。 3. 接下来,需要使用 Java 代码访问注册列表,找到软件对应的 CLSID(例如:{E8A6...

    从HttpServletRequest获取各种路径总结

    - 日志记录:记录用户的访问路径,用于审计或统计分析。 - 动态页面跳转:基于请求的URI来决定下一步的动作或页面展示。 ##### 4. `getServletPath` - **描述**:获取请求的Servlet路径。 - **示例**:`request....

    关于java 读取eclipse下文件相对路径 关于Java的文件相对路径问题一直 ....doc

    在Eclipse中,为了保证代码在其他环境中也能正常工作,建议使用绝对路径或者基于类加载器的资源获取方式(如`ClassLoader.getResource()`或`ClassLoader.getResourceAsStream()`),而不是依赖于工作空间的相对路径...

Global site tag (gtag.js) - Google Analytics