【转载】使用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     }
复制代码

 结果如下:

                    

原文地址:https://www.cnblogs.com/appium/p/11304291.html