`

Java路径问题最终解决方案 转

阅读更多
getResourceAsStream ()返回的是inputstream

getResource()返回:URL

Class.getResource("")    返回的是当前Class这个类所在包开始的为置

Class.getResource("/") 返回的是classpath的位置

getClassLoader().getResource("")  返回的是classpath的位置

getClassLoader().getResource("/")  错误的!!

========================================================================
Class.getResourceAsStream 和 ClassLoader.getResourceAsStream
详细出处参考:http://www.itqun.net/content-detail/237424.html
这两个方法还是略有区别的, 以前一直不加以区分,直到今天发现要写这样的代码的时候运行
错误, 才把这个问题澄清了一下。

基本上,两个都可以用于从 classpath 里面进行资源读取,  classpath包含classpath中的路径
和classpath中的jar。 

两个方法的区别是资源的定义不同, 一个主要用于相对与一个object取资源,而另一个用于取相对于classpath的
资源,用的是绝对路径。

在使用Class.getResourceAsStream 时, 资源路径有两种方式, 一种以 / 开头,则这样的路径是指定绝对
路径, 如果不以 / 开头, 则路径是相对与这个class所在的包的。 

在使用ClassLoader.getResourceAsStream时, 路径直接使用相对于classpath的绝对路径。 

举例,下面的三个语句,实际结果是一样的:!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
   com.explorers.Test.class.getResourceAsStream("abc.jpg")
= com.explorers.Test.class.getResourceAsStream("/com/explorers/abc.jpg")
= ClassLoader.getResourceAsStream("com/explorers/abc.jpg")
================================================================================
  
http://hi.baidu.com/lingsuch/blog/item/e4060f66a1d4ce28aa184cae.html
平时写程序的时候,很多时候提示文件找不到,而抛出了异常,现在整理如下


一 相对路径的获得
    说明:相对路径(即不写明时候到底相对谁)均可通过以下方式获得(不论是一般的java项目还是web项目)
         String relativelyPath=System.getProperty("user.dir"); 
        上述相对路径中,java项目中的文件是相对于项目的根目录
        web项目中的文件路径视不同的web服务器不同而不同(tomcat是相对于 tomcat安装目录\bin)


二 类加载目录的获得(即当运行时某一类时获得其装载目录)
      1.1)通用的方法一(不论是一般的java项目还是web项目,先定位到能看到包路径的第一级目录)
        
        InputStream is=TestAction.class.getClassLoader().getResourceAsStream("test.txt"); 
                  (test.txt文件的路径为 项目名\src\test.txt;类TestAction所在包的第一级目录位于src目录下)
        
        上式中将TestAction,test.txt替换成对应成相应的类名和文件名字即可

        1.2)通用方法二 (此方法和1.1中的方法类似,不同的是此方法必须以'/'开头) 
             InputStream is=Test1.class.getResourceAsStream("/test.txt"); 
                      (test.txt文件的路径为 项目名\src\test.txt,类Test1所在包的第一级目录位于src目录下)

    


三 web项目根目录的获得(发布之后)
    1 从servlet出发

    可建立一个servlet在其的init方法中写入如下语句
      ServletContext s1=this.getServletContext();
   String temp=s1.getRealPath("/"); (关键) 
    结果形如:D:\工具\Tomcat-6.0\webapps\002_ext\ (002_ext为项目名字)

                     如果是调用了s1.getRealPath("")则输出D:\工具\Tomcat-6.0\webapps\002_ext(少了一个"\")

   2 从httpServletRequest出发

             String cp11111=request.getSession().getServletContext().getRealPath("/");

      结果形如:D:\工具\Tomcat-6.0\webapps\002_ext\



四 classpath的获取(在Eclipse中为获得src或者classes目录的路径)

    方法一   Thread.currentThread().getContextClassLoader().getResource("").getPath()


eg: String t=Thread.currentThread().getContextClassLoader().getResource("").getPath();
          System.out.println("t---"+t);

                      输出:t---/E:/order/002_ext/WebRoot/WEB-INF/classes/




   方法二     JdomParse.class.getClassLoader().getResource("").getPath() (JdomParse为src某一个包中的类,下同)

                 eg:String p1=JdomParse.class.getClassLoader().getResource("").getPath();
       System.out.println("JdomParse.class.getClassLoader().getResource--"+p1);

   输出: JdomParse.class.getClassLoader().getResource--/E:/order/002_ext/WebRoot/WEB-INF/classes/


另外,如果想把文件放在某一包中,则可以 通过以下方式获得到文件(先定位到该包的最后一级目录)

        eg String p2=JdomParse.class.getResource("").getPath(); 
         System.out.println("JdomParse.class.getResource---"+p2);

   输出: JdomParse.class.getResource---/E:/order/002_ext/WebRoot/WEB-INF/classes/jdom/ (JdomParse为src目录下jdom包中的类)


四   属性文件的读取:

     方法 一

           InputStream in = lnew BufferedInputStream( new FileInputStream(name));          Properties p = new Properties();   p.load(in); 


    注意路径的问题,做执行之后就可以调用p.getProperty("name")得到对应属性的值


方法二

        Locale locale = Locale.getDefault(); 
              ResourceBundle localResource = ResourceBundle.getBundle("test/propertiesTest", locale); 
            String value = localResource.getString("test"); 
           System.out.println("ResourceBundle: " + value);

   工程src目录下propertiesTest.properties(名字后缀必须为properties)文件内容如下:

               test=hello word

 

Java路径问题最终解决方案

http://hi.baidu.com/lhx222/blog/item/69c62bdb398b0e62d0164eec.html 

分享到:
评论

相关推荐

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

    ### Java路径问题最终解决方案之一 #### 一、引言与背景 在进行Java开发时,文件路径处理一直是令人头疼的问题之一。特别是在涉及跨平台或在不同环境中部署的应用程序时,路径问题更是频繁出现。本文旨在深入探讨...

    Java路径问题最终解决方案(转) - lily的日志 - 网易博客.mht

    Java路径问题最终解决方案(转) - lily的日志 - 网易博客.mhtJava路径问题最终解决方案(转) - lily的日志 - 网易博客.mhtJava路径问题最终解决方案(转) - lily的日志 - 网易博客.mht

    Java路径问题最终解决方案 —可定位所有资源的相对路径寻址

    Java路径问题最终解决方案 —可定位所有资源的相对路径寻址 通过相对classpath路径实现自由寻找资源的助手类的源代码

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

    ### Java路径问题最终解决方案 #### 一、引言 在Java开发过程中,处理文件路径问题时常令人头痛。本文将深入探讨Java中的路径问题,并提供一个有效的解决方案,该方案旨在简化路径处理过程,使得开发者能够更加...

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

    Java路径问题一直是开发者在处理文件操作时经常遇到的挑战,主要涉及到如何正确地定位和访问文件资源。在Java中,路径分为绝对路径和相对路径,这两种路径又有不同的表现形式。 一、URI形式的绝对资源路径 例如:...

    车辆路径问题 (VRP),Java 上的遗传算法解决方案_java_代码_下载

    在这个Java实现的遗传算法解决方案中,我们首先需要理解遗传算法的基本步骤: 1. **初始化种群**:随机生成一组初始的车辆路线,每条路线可以看作是一个个体,形成种群。 2. **适应度函数**:为每个个体计算适应度...

    java或wed解决路径问题

    针对这种情况,Spring框架提供了一种解决方案。在`WEB-INF/web.xml`中,可以定义一个名为`webAppRootKey`的参数,设置一个默认值(如`webapp.root`)作为键,然后在Listener、Filter或Servlet中获取`ServletContext`...

    (最终解决)java.lang.UnsatisfiedLinkError解决尝试

    最后,博客链接可能提供了具体的解决方案。访问该链接,按照作者提供的步骤进行操作,这可能会对你的问题有直接帮助。在阅读博客时,注意作者提到的特定情况,如错误消息、环境差异和他们采取的解决措施。 总结来说...

    java实现野人与传教士过河问题

    在这个问题中,我们可以将其转化为一个状态空间搜索问题,使用深度优先搜索(DFS)、广度优先搜索(BFS)或A*搜索算法来寻找解决方案。以下是一些核心知识点: 1. **状态表示**:每个状态代表传教士和野人在岸上的...

    完美解决方案:Java生成复杂Word文档

    【Java生成复杂Word文档的完美解决方案】 在Java开发中,生成复杂的Word文档一直是一个挑战,尤其是在满足严格的格式和打印需求时。传统的解决方案如Apache POI和iText在处理大量表格、图片以及复杂的文档布局时,...

    Java完美生成的解决方案[参考].pdf

    在Java开发中,生成高质量的Word文档是一项挑战,特别是当涉及到复杂的格式、表格和图片时。传统的库如Apache POI虽然能处理基本的读写任务,但在...这种解决方案尤其适用于需要大量生成定制化报告或文档的业务场景。

    最短路径问题 大型程序

    总结来说,解决大型程序中的最短路径问题需要深入理解图论和算法,选择适当的解决方案,并根据实际需求优化计算性能。对于有多个起点的情况,可能需要采用Dijkstra算法、Floyd-Warshall算法或A*搜索算法的变体。同时...

    遗传算法求解tsp问题 java源码

    总的来说,这个Java源码实例为学习和理解遗传算法提供了一个实用的平台,同时也展示了如何将这种生物启发式方法应用于实际问题中,尤其是面对旅行商问题这类NP完全问题时,遗传算法能够找到接近最优的解决方案。...

    使用遗传算法解决TSP问题(Java)

    1. **初始化种群**:随机生成一组个体(路径),每个个体代表一种可能的解决方案。 2. **适应度函数**:定义一个评价个体优劣的标准,即计算每个个体(路径)的总距离,越短的路径适应度越高。 3. **选择操作**:...

    蚁群算法解决01背包问题-java实现

    6. **程序运行与结果输出**:用户可以直接运行AcoKP.java文件来执行算法,程序会输出最终的解决方案,即选取哪些物品及总价值。可能还包括算法的运行时间、迭代次数等信息,帮助理解算法的效率。 7. **优化与改进**...

    用JAVA实现的布线问题求解

    6. **近似算法**:如Prim或Kruskal算法,可以用于构造最小生成树,为布线问题提供一个接近最优的解决方案。 在Java编程中,实现这些算法的关键在于数据结构的选择,如队列、栈、图和优先级队列。同时,需要合理设计...

    贪心法求单源最短路径.doc

    然而,对于某些问题,如单源最短路径问题,如果使用动态规划,可能会得到更一般性的解决方案,因为它能够处理具有依赖关系的子问题。在实际应用中,根据问题的具体特点选择合适的算法至关重要。

    Feign发送Get请求时,采用POJO对象传递参数的最终解决方案.docx

    ### Feign发送Get请求时,采用POJO对象传递参数的最终解决方案 #### 前言 在Spring Cloud技术栈中,Feign作为一种声明式的HTTP客户端框架,极大地简化了微服务间的HTTP请求调用过程,使其几乎如同调用本地方法一般...

Global site tag (gtag.js) - Google Analytics