精华内容
下载资源
问答
  • Java项目中根据相对路径和绝对路径获取文件的方法 getResource(nJava项目中根据相对路径和绝对路径获取文件的方法 getResource(name)首先,项目中文件分布情况如下,innerFile.txt位于test.test包下,innerInnerFile...

    Java项目中根据相对路径和绝对路径获取文件的方法 getResource(n

    Java项目中根据相对路径和绝对路径获取文件的方法 getResource(name)

    首先,项目中文件分布情况如下,innerFile.txt位于test.test包下,innerInnerFile.txt位于test.test.inner包下,outterFile.txt位于包的根目录下,

    27da2d749dcc18394de664722880517e.png

    那么,在App类里,如何根据相对路径、绝对路径获取innerFile.txt、innerInnerFile.txt和outterFile.txt呢?

    class.getResource(name)

    先来看一下Class.getResource(name)方法,该方法接收一个表示文件路径的参数,返回一个URL对象,该URL对象表示的name指向的那个资源(文件)。这个方法是在类中根据name获取资源。其中,name可以是文件的相对路径(相对于该class类来说),也可以是绝对路径(绝对路径的话,根目录符号/是代表项目路径而不是磁盘的根目录)。例如,如下两种根据路径获取文件的效果是一样的 :

    App.class.getResource('innerFile.txt')

    App.class.getResource('/test/test/innerFile.txt')

    由于innerFile.txt和App类是在同一个包下,所以通过App.class和相对路径可以获取到App这个类的包下面的innerFile.txt文件。而当传入的是绝对路径/test/test/innerFile.txt,getResource()方法是从项目的包的根目录开始解析路径的。所以这两种获取文件的效果是一样的。

    classLoader.getResource(name)

    该方法的作用与class.getResource(name)的作用一样,接收一个表示路径的参数,返回一个URL对象,该URL对象表示name对应的资源(文件)。但是,与class.getResource(name)不同的是,该方法只能接收一个相对路径,不能接收绝对路径如/xxx/xxx。并且,接收的相对路径是相对于项目的包的根目录来说的。比如,如下两种获取文件的效果是一样的:

    App.class.getResource('innerFile.txt')

    App.class.getClassLoader().getResource('test/test/innerFile.txt')

    classLoader.getResource('test/test/innerFile.txt')是相对于项目的包的根目录来解析路径的,所以通过该路径能够获取到innerFile.txt,并且不能传入绝对路径,否则报错。

    介绍完了这两种,那么应该能够根据这两种方法分别获取到innerInnerFile.txt文件和outterFile.txt文件吧?

    class.getResource(name)与classLoader.getResource(name)的联系

    如上所述,class.getResource(name)能够接受相对路径和绝对路径,而classLoader.getResource(name)只能接收相对路径,那么这两种方法的联系是什么呢?

    通过查看class.getResource(name)源码,可以看到,class.getResource(name)最终其实是通过classLoader.getResource(name)来获取资源文件的,如,

    // class.getResource(name)方法

    public java.net.URL getResource(String name) {

    name = resolveName(name);

    ClassLoader cl = getClassLoader0();

    if (cl==null) {

    // A system class.

    return ClassLoader.getSystemResource(name);

    }

    return cl.getResource(name);

    }

    其中,class.getResource(name)首先会对name进行解析和处理,如,

    // class.getResource(path)中对path预处理path = resolveName(path)

    private String resolveName(String name) {

    if (name == null) {

    return name;

    }

    if (!name.startsWith("/")) {

    Class> c = this;

    while (c.isArray()) {

    c = c.getComponentType();

    }

    String baseName = c.getName(); // 获取带包路径的类名,此处类名是App,包的路径是test.test,所以baseName就是test.test.App。

    int index = baseName.lastIndexOf('.');

    if (index != -1) {

    name = baseName.substring(0, index).replace('.', '/') // 给参数加上当前类所在的包的路径前缀,即在name之前加上test/test,之后会委托给classLoader来getResource(path),而classLoader默认是从项目根路径获取资源的。

    +"/"+name;

    }

    } else {

    // path以'/'开头,则去掉开头的'/',采用classLoader.getResource(去掉开头'/'后的path)来获取资源。

    name = name.substring(1);

    }

    return name;

    }

    其中,如果传入的是绝对路径,那么去掉最前面的/,然后会委托给classLoader.getResource(name)处理;如果传入的是相对路径,那么首先获取到当前class类的完整包名,把包名中的.替换成/,也就是说,App类获取到包名是test.test.App,那么会被替换成test/test/App,然后委托给classLoader.getResource(name)处理。

    总结

    class.getResource(name)中name可以写成绝对路径/test/test/innerFile.txt和相对路径【假设该class位于test.test包下】”innerFile.txt”,其中绝对路径的/是相当于项目的classpath根目录,相对路径是相对于当前class的路径。而classLoader.getResource(name)中的name一定要写成相对路径如test/test/innerFile.txt(最前面不能是/ ),并且这个相对路径是相对于项目的classpath根目录的路径,相当于class.getResource(name)中写绝对路径/test/test/innerFile.txt。

    喜欢的可以关注微信公众号:

    参考

    我自己的头条号:开发技术专注者

    Java项目中根据相对路径和绝对路径获取文件的方法 getResource(n相关教程

    展开全文
  • 写道//js获取项目根路径,如: http://localhost:7070/mbservfunction getRootPath(){//获取当前网址,如: ...//获取主机地址之后目录,如: mbserv/share/me...

    写道

    //js获取项目根路径,如: http://localhost:7070/mbserv

    function getRootPath(){

    //获取当前网址,如: http://localhost:7070/mbserv/share/meun.jsp

    var curWwwPath=window.document.location.href;

    //获取主机地址之后的目录,如: mbserv/share/meun.jsp

    var pathName=window.document.location.pathname;

    var pos=curWwwPath.indexOf(pathName);

    //获取主机地址,如: http://localhost:7070

    var localhostPaht=curWwwPath.substring(0,pos);

    //获取带"/"的项目名,如:/uimcardprj

    var projectName=pathName.substring(0,pathName.substr(1).indexOf('/')+1);

    return(localhostPaht+projectName);

    }

    JAVA获取路径

    写道

    String path = getRequest().getContextPath();

    String basePath = getRequest().getScheme()+"://"+getRequest().getServerName()+":"+getRequest().getServerPort()+path+"/";

    /**应用部署绝对路径*/

    String sysWebPath = getRequest().getSession().getServletContext().getRealPath("");

    getRequest() 写道

    public HttpServletRequest getRequest() { HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder .getRequestAttributes()).getRequest(); return request; }

    展开全文
  • 相对路径和绝对路径的区别在HTML里只要涉及文件的地方(如超级链接、图片等)就会涉及绝对路径与相对路径的概念。1.绝对路径绝对路径是指文件在硬盘上真正存在的路径。例如“bg.jpg”这个图片是存放在硬盘的“E:\book\...

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

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

    绝对路径是指文件在硬盘上真正存在的路径。例如“bg.jpg”这个图片是存放在硬盘的“E:\book\网页布局代码\第2章”目录下,那么 “bg.jpg”这个图片的绝对路径就是“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服务器的哪个位置,在浏览器里都能正确地显示图片。

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

    在 相对路径里常使用“../”来表示上一级目录。如果有多个上一级目录,可以使用多个“../”,例如“http://www.cnblogs.com/”代表上上级目录。假设 “s1.htm”文件所在目录为“E:\book\网页布局\代码\第2章”,而“bg.jpg”图片所在目录为“E:\book\网页布局\代码”,那 么“bg.jpg”图片相对于“s1.htm”文件来说,是在其所在目录的上级目录里,则引用图片的语句应该为:

    4.相对虚拟目录

    有关相对路径还有一个比较特殊的表示:“相对虚拟目录”。请看下面的例子:

    在这个例子里,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=newjava.io.File(application.getRealPath(request.getRequestURI())).getParent();

    结果:D:\resin\webapps\TEST2.在类中取得路径:

    (1)类的绝对路径:Class.class.getClass().getResource("/").getPath()

    结果:/D:/TEST/WebRoot/WEB-INF/classes/pack/(2)得到工程的路径:System.getProperty("user.dir")

    结果:D:\TEST3.在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("/");

    展开全文
  • 项目中文件分布情况如下,innerFile.txt位于test.test包下,innerInnerFile.txt位于test.test.inner包下,outterFile.txt位于包根目录下,那么,在App类里,如何根据相对路径绝对路径获取innerFile.txt、...

    首先,项目中文件分布情况如下,innerFile.txt位于test.test包下,innerInnerFile.txt位于test.test.inner包下,outterFile.txt位于包的根目录下,

    文件位置

    那么,在App类里,如何根据相对路径、绝对路径获取innerFile.txt、innerInnerFile.txt和outterFile.txt呢?

    class.getResource(name)

    先来看一下Class.getResource(name)方法,该方法接收一个表示文件路径的参数,返回一个URL对象,该URL对象表示的name指向的那个资源(文件)。这个方法是在类中根据name获取资源。其中,name可以是文件的相对路径(相对于该class类来说),也可以是绝对路径(绝对路径的话,根目录符号/是代表项目路径而不是磁盘的根目录)。例如,如下两种根据路径获取文件的效果是一样的 :

    1. App.class.getResource('innerFile.txt')
    2. App.class.getResource('/test/test/innerFile.txt')

    由于innerFile.txt和App类是在同一个包下,所以通过App.class和相对路径可以获取到App这个类的包下面的innerFile.txt文件。而当传入的是绝对路径/test/test/innerFile.txt,getResource()方法是从项目的包的根目录开始解析路径的。所以这两种获取文件的效果是一样的。

    classLoader.getResource(name)

    该方法的作用与class.getResource(name)的作用一样,接收一个表示路径的参数,返回一个URL对象,该URL对象表示name对应的资源(文件)。但是,与class.getResource(name)不同的是,该方法只能接收一个相对路径,不能接收绝对路径如/xxx/xxx。并且,接收的相对路径是相对于项目的包的根目录来说的。比如,如下两种获取文件的效果是一样的:

    1. App.class.getResource('innerFile.txt')
    2. App.class.getClassLoader().getResource('test/test/innerFile.txt')

    classLoader.getResource('test/test/innerFile.txt')是相对于项目的包的根目录来解析路径的,所以通过该路径能够获取到innerFile.txt,并且不能传入绝对路径,否则报错。
    介绍完了这两种,那么应该能够根据这两种方法分别获取到innerInnerFile.txt文件和outterFile.txt文件吧?

    class.getResource(name)与classLoader.getResource(name)的联系

    如上所述,class.getResource(name)能够接受相对路径和绝对路径,而classLoader.getResource(name)只能接收相对路径,那么这两种方法的联系是什么呢?

    通过查看class.getResource(name)源码,可以看到,class.getResource(name)最终其实是通过classLoader.getResource(name)来获取资源文件的,如,

    // class.getResource(name)方法
    public java.net.URL getResource(String name) {
        name = resolveName(name);
        ClassLoader cl = getClassLoader0();
        if (cl==null) {
            // A system class.
            return ClassLoader.getSystemResource(name);
        }
        return cl.getResource(name);
    }

    其中,class.getResource(name)首先会对name进行解析和处理,如,

    // class.getResource(path)中对path预处理path = resolveName(path)
    private String resolveName(String name) {
        if (name == null) {
            return name;
        }
        if (!name.startsWith("/")) {
            Class<?> c = this;
            while (c.isArray()) {
                c = c.getComponentType();
            }
            String baseName = c.getName();  // 获取带包路径的类名,此处类名是App,包的路径是test.test,所以baseName就是test.test.App。
            int index = baseName.lastIndexOf('.');
            if (index != -1) {
                name = baseName.substring(0, index).replace('.', '/')  // 给参数加上当前类所在的包的路径前缀,即在name之前加上test/test,之后会委托给classLoader来getResource(path),而classLoader默认是从项目根路径获取资源的。
                    +"/"+name;
            }
        } else {
            // path以'/'开头,则去掉开头的'/',采用classLoader.getResource(去掉开头'/'后的path)来获取资源。
            name = name.substring(1);
        }
        return name;
    }

    其中,如果传入的是绝对路径,那么去掉最前面的/,然后会委托给classLoader.getResource(name)处理;如果传入的是相对路径,那么首先获取到当前class类的完整包名,把包名中的.替换成/,也就是说,App类获取到包名是test.test.App,那么会被替换成test/test/App,然后委托给classLoader.getResource(name)处理。

    总结

    class.getResource(name)中name可以写成绝对路径/test/test/innerFile.txt和相对路径【假设该class位于test.test包下】”innerFile.txt”,其中绝对路径的/是相当于项目的classpath根目录,相对路径是相对于当前class的路径。而classLoader.getResource(name)中的name一定要写成相对路径如test/test/innerFile.txt(最前面不能是/ ),并且这个相对路径是相对于项目的classpath根目录的路径,相当于class.getResource(name)中写绝对路径/test/test/innerFile.txt

    喜欢的可以关注微信公众号:
    这里写图片描述

    参考

    1. 我自己的头条号:开发技术专注者
    展开全文
  • 1.基本概念的理解绝对路径绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL物理路径)例如:C:\xyz\test.txt 代表了test.txt文件的绝对路径。http://www.sun.com/index.htm也代表了一个URL绝对路径。...
  • 转自:http://wwwdd2315.blog.163.com/blog/static/66661889201091953350298/在JAVA文件中获取该项目的相对路径1.基本概念的理解绝对路径绝对路径就是你主页上的文件的完整URL或文件目录在硬盘上的真正的路径,它...
  • 1.基本概念的理解绝对路径绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL物理路径)例如:C:\xyz\test.txt代表了test.txt文件的绝对路径。http://www.sun.com/index.htm也代表了一个URL绝对路径。...
  • java获取web文件的相对路径

    千次阅读 2019-01-02 20:05:59
    JAVA文件中获取该项目的相对路径 1.基本概念的理解  绝对路径绝对路径就是你主页上的文件的完整URL或文件目录在硬盘上的真正的路径,它主要包括完整URL物理路径两种类型。 例如:C:\xyz\test.txt 代表了test....
  • 一、绝对路径 一般不使用,例如 D:/Enviroment/hello.jsp 二、相对路径 1. 概述 1.1 不带 / (反斜杠)相对于当前资源路径 1.2 带 / 反斜杠 有3种情况(服务端,客户端,资源获取) 服务端 : ...
  • 相对路径和绝对路径的区别:  在HTML里只要涉及文件的地方(如超级链接、图片等),就会涉及绝对路径与相对路径的概念。  1.绝对路径 绝对路径是指文件在硬盘上真正存在的路径。例如“bg.jpg”这个图片是存放在...
  • JAVA获取文件的相对路径 1.基本概念的理解 绝对路径绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL物理路径)例如: C:\xyz\test.txt 代表了test.txt文件的绝对路径。...
  • 相对路径和绝对路径的区别 在HTML里只要涉及文件的地方(如超级链接、图片等)就会涉及绝对路径与相对路径的概念。 1.绝对路径 绝对路径是指文件在硬盘上真正存在的路径。例如“bg.jpg”这个图片是存放在...
  • JAVA 获取web文件的相对路径 2010-01-26 15:55 在JAVA文件中获取该项目的相对路径 1.基本概念的理解  绝对路径绝对路径就是你主页上的文件的完整URL或文件目录在硬盘上的真正的路径,它主要包括完整URL...
  • 关于绝对路径和相对路径绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:C:xyz est.txt 代表了test.txt文件的绝对路径。http://www.sun.com/index.htm也代表了一个URL绝对路径相对...
  • 相对路径和绝对路径的区别  在HTML里只要涉及文件的地方(如超级链接、图片等)就会涉及绝对路径与相对路径的概念。  1.绝对路径   绝对路径是指文件在硬盘上真正存在的路径。例如“bg.jpg”这个图片是...
  • java中如何获取绝对路径和相对路径

    万次阅读 2015-10-30 11:12:15
    3. JSP/Servlet中获得当前应用的相对路径和绝对路径 3.1 JSP中获得当前应用的相对路径和绝对路径  根目录所对应的绝对路径:request.getRequestURI()  文件的绝对路径 :application.getRealPath(request....
  • 1. 前言Java 开发中我们经常要获取文件的路径,比如读取配置文件等等。今天我们就关于文件的路径和如何读取文件简单地探讨一下。2. 文件的路径文件的路径通常有 相对路径绝对路径。2.1 相对路径以当前文件为基准...
  • JAVA文件中获取该项目的相对路径 1.基本概念的理解 绝对路径绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL物理路径)例如: C:\xyz\test.txt 代表了test.txt文件的绝对路径。...
  • 绝对路径文件在硬盘中真正存放位置,例如 D:\JavaProjects\exceptionLianxi\src\main\java\zzz.txt 当然可以省略掉 **需求:**获取一个文本上每个字符出现次数,将结果写在times.txt上 impo...
  • 今天在Properties读配置文件的时候老是出现路径的错误。 总结一下有关路径的一些坑 关于getResourceAsStreamgetResource的问题 这两种方法在类类加载器上都有这个方法 分别说明下, getResourceAsStream方法 ...
  • 1.基本概念的理解绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL物理路径)例如:C:xyz est.txt 代表了test.txt文件的绝对路径.http://www.sun.com/index.htm也代表了一个URL绝对路径....
  • 1.基本概念的理解绝对路径绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL物理路径)例如:C:\xyz\test.txt 代表了test.txt文件的绝对路径。http://www.sun.com/index.htm也代表了一个URL绝对路径。...
  • java获取路径几种途径,1、获取web服务器下的文件路径,2、获取本地路径,3、获取相对路径
  • 1.基本概念的理解 绝对路径绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL物理路径)例如: C:\xyz\test.txt 代表了test.txt文件的绝对路径。http://www.sun.com/index.htm也代表了一个 URL绝对...
  • 1. 前言Java 开发中我们经常要获取文件的路径,比如读取配置文件等等。今天我们就关于文件的路径和如何读取文件简单地探讨一下。2. 文件的路径文件的路径通常有 相对路径绝对路径。2.1 相对路径以当前文件为基准...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 700
精华内容 280
关键字:

java获取文件的相对路径和绝对路径

java 订阅