Sealyu

          --- 博客已遷移至: http://www.sealyu.com/blog

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks

          平時寫程序的時候,很多時候提示文件找不到,而拋出了異常,現在整理如下

          一 相對路徑的獲得
              說明:相對路徑(即不寫明時候到底相對誰)均可通過以下方式獲得(不論是一般的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

          posted on 2010-02-06 11:00 seal 閱讀(305) 評論(0)  編輯  收藏 所屬分類: Java基礎
          主站蜘蛛池模板: 朝阳区| 八宿县| 信丰县| 阳朔县| 天峨县| 樟树市| 徐州市| 平度市| 商南县| 石林| 东至县| 福建省| 富裕县| 绍兴市| 磐石市| 湘阴县| 铅山县| 池州市| 西乌珠穆沁旗| 开平市| 耒阳市| 盱眙县| 富蕴县| 松溪县| 平凉市| 平度市| 丹凤县| 铜陵市| 永昌县| 五常市| 平果县| 沽源县| 泸定县| 大城县| 来凤县| 石嘴山市| 汤原县| 安丘市| 博爱县| 新邵县| 华蓥市|