使用Class.getResource和ClassLoader.getResource方法獲取文件路徑


     自從轉投Java陣營后,一直發下Java程序的路徑讀取異常麻煩,因此查閱了比較多的版本內容,整合了一份自己的學習筆記。主要使用Class及通過ClassLoader來動態獲取文件路徑。

     查閱鏈接如下: Class及ClassLoader下獲取Resource原理
                               
Class及ClassLoader下獲取Resource圖文解析

  首先,在IDE下面寫的.java文件最終會被編譯成一個.class的類。上面兩種方法去讀取文件都是基於.class的相對路徑進行索引。

 

    

 通過Class和ClassLoader兩個類下的Resource方法獲取路徑主要區別是參數是否以"/"開頭。

   1. 通過Class.getResource方法獲取文件路徑

    △getResource方法

  (1) getResource方法必須輸入參數,該方法沒有提供空參數的方法重載,因此該方法必須輸入參數。

  (2)  Class.getResource("")與Class.getResource("/") 的主要區別:空字符串下對應返回class文件所在包的位置,"/"參數返回的是class文件所在的根目錄(所在包的上級目錄)

          

   2. 通過ClassLoader.getResource方法獲取文件路徑

      ClassLoader.getResource方法同樣帶有一個String 類型的目錄參數,但ClassLoader.getResource方法參數不支持參數為"/",因為該實例方法返回的就是類所在的根目錄路徑。輸入帶"/"開頭的字符串,會返回null。

       

   3. 示例以JDBCHelper類,分別獲取1.xml,2.xml 及dbcfg.properties文件

  文件分布如圖所示:               

  

 1     @Test
 2     public void testFilePath() throws Exception
 3     {
 4         // 以class.getResource方法獲取文件路徑
 5         System.out.println("------getFileURL by class.getResource------");
 6         URL fileURL = JDBCHelper.class.getResource("1.xml");
 7         System.out.println("1.xml Exit? " + isfileExit(fileURL));
 8 
 9         fileURL = JDBCHelper.class.getResource("/2.xml");
10         System.out.println("2.xml Exit? " + isfileExit(fileURL));
11 
12         fileURL = JDBCHelper.class.getResource("/config/dbcfg.properties");
13         System.out.println("properties Exit? " + isfileExit(fileURL));
14         System.out.println("------getFileURL by classLoader.getResource------");
15 
16         fileURL = JDBCHelper.class.getClassLoader().getResource("com/scl/test/transcaction/1.xml");
17         System.out.println("1.xml Exit? " + isfileExit(fileURL));
18 
19         fileURL = JDBCHelper.class.getClassLoader().getResource("2.xml");
20         System.out.println("2.xml Exit? " + isfileExit(fileURL));
21 
22         fileURL = JDBCHelper.class.getClassLoader().getResource("config/dbcfg.properties");
23         System.out.println("properties Exit? " + isfileExit(fileURL));
24 
25     }
26 
27     public boolean isfileExit(URL fileURL) throws Exception
28     {
29         if (fileURL == null) { return false; }
30         String URLStr = URLDecoder.decode(fileURL.getFile(), "utf8");
31         File f = new File(URLStr);
32         if (f != null && f.exists())
33         {
34             f = null;
35             return true;
36         }
37         else
38         {
39             return false;
40         }
41 
42     }
View Code

 結果如下:

                    

   以上為getResource方法的總結,看來基礎還是得加強 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM