精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-05-30
最后修改:2009-06-02
当你想要在java类包中某个层次上添加一个非java文件,像资源文件,XML配置文件 或其他格式文件的时候, Class.getResource() 是一个很有用的方法,它不是根据 绝对路径来定位某个资源(文件),而是根据相对类路径来定位资源。当我们用绝对路径 来定位java类包中某个层次的资源时,项目的部署和迁移可能会出现问题,而且跨平台 运行也会出现问题。(像 "c:/1.txt"这个文件路径 在linux里是不能被识别的)
下面显示了一个类层次:
+bin-- +test_1-- Test.class +test_2-- hello_en.txt hello_zh.txt
注意: 资源文件必须在编译后类路径里才能通过Class.getResource() 的方式被定位 , 而不是在源文件路径里。
下面是Test_1的代码用来定位和读取hello_en.txt文件 package test_1; import java.io.File; import java.io.IOException; import java.io.Reader; import java.net.URISyntaxException; import java.net.URL; import java.io.FileReader; public class Test { public static void main(String[] args) throws URISyntaxException, IOException { //根据类包根层次的相对路径来定位hello_en.txt文件 URL url = Test_1.class.getResource("/test_1/test_2/hello_en.txt"); //定位hello_en.txt的另外一种方式 //根据当前类文件Test_1.class的相对路径来定位hello_en.txt文件 //URL url = Test_1.class.getResource("test_2/hello_en.txt"); File file = new File(url.toURI()); StringBuffer buffer = new StringBuffer(); Reader reader = new FileReader(file); int ch = reader.read(); while(ch != -1){ buffer.append((char)ch); ch = reader.read(); } reader.close(); System.out.println(buffer.toString()); } }
运行这个类文件,输出结果如下(hello_en.txt 文件的内容为 hello !):
hello !
定位hello_zh.txt文件的代码片段如下(当然也有两种方式):
URL url = Test_1.class.getResource("/hello_zh.txt"); 或者 URL url = Test_1.class.getResource("../hello_zh.txt");
还有一点需要注意 ,用
File file = new File(url.toURI()); 来获取一个File对象,最好不能用
File file = new File(url.getFile()); 因为URL.getFile()返回的文件路径字符串自动将空格转换为了ASC2编码,如果在你的绝对文件路径中含有空格,就会无法定位到这个文件,当时在这快也确实让我迷惑了一下。
Class.getResourceAsStream() 也可以用于定位和获取资源文件,和Class.getResource差不多,不过返回的是一个InputStream对象。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 5237 次