近遇到一些Jar包内外配置文件读取的问题。索性自己测试总结一下,与大家分享。

  路径文件读取,简单,直接的方式

    /**
     * 从路径读取文件,基本的文件读取方式
     * 
     * @author lihzh
     * @data 2012-4-11 下午9:33:44
     */
    @Test
    public void testGetFileFromAbsolutePath() {
        String dirPathNotUnderClasspath = "D:\workspace-home\JavaDemo\conf";
        File dirFile = new File(dirPathNotUnderClasspath);
        AssertDirFile(dirFile);
    }
           /**
     * 对文件夹类型文件的断言
     * 
     * @param dirFile
     * @author lihzh
     * @data 2012-4-11 下午9:49:14
     */
    private void AssertDirFile(File dirFile) {
        // 文件存在
        Assert.assertTrue(dirFile.exists());
        // 是路径
        Assert.assertTrue(dirFile.isAbsolute());
        // 是个文件夹
        Assert.assertTrue(dirFile.isDirectory());
        // 获取文件夹下所有文件
        File[] files = dirFile.listFiles();
        // 下面有文件
        Assert.assertNotNull(files);
        // 且只有一个
        Assert.assertEquals(1, files.length);
        // 文件名匹配
        Assert.assertEquals("test.properties", files[0].getName());
    }

  相对于执行编译命令路径的方式读取

    /**
     * 从相对路径读取文件,相对于编译路径,在Eclipse中即为工程所在根目录。 本质还是绝          * 对路径读取。
     * 
     * @author lihzh
     * @data 2012-4-11 下午9:51:10
     */
    @Test
    public void testGetFileFromRelativePath() {
        String dirPath = System.getProperty("user.dir") + "\conf";
        File dirFile = new File(dirPath);
        AssertDirFile(dirFile);
    }

  用URI构造本地文件读取

     /**
     * 构造URI/URL格式的文件路径,读取本地文件
     * 
     * @author lihzh
     * @throws URISyntaxException
     * @throws MalformedURLException
     * @data 2012-4-11 下午10:25:00
     */
    @Test
    public void testGetFileFromURIPath() throws URISyntaxException,
            MalformedURLException {
        // 直接用URI构造, 由于URI和URL可以互转,所以如果为URL直接用URL.toURI转换成URI即可
        URI uri = new URI("file:/D:/workspace-home/JavaDemo/conf/");
        File dirFile = new File(uri);
        AssertDirFile(dirFile);
    }

  特别说明:用URI/URL的方式构造路径是个人比较推荐的,可以解决一些路径读取的问题。例如:Spring会对URI/URL格式的路径进行专有处理可以准确定位的位置,而直接使用路径,在用Classpath和FileSystem两种不同的初始化方式下,可能会出现错误。