黑马程序员技术交流社区
标题:
类加载文件问题
[打印本页]
作者:
自己玩
时间:
2012-7-20 22:01
标题:
类加载文件问题
@Test
public void demo4() throws IOException {
String file = ReadFileTest.class.getResource("/4.txt").getFile();
// String file = ReadFileTest.class.getClassLoader().getResource("/4.txt").getFile();
System.out.println(file);
BufferedReader reader = new BufferedReader(new FileReader(file));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
问题:下面两个代码互换为什么结果 不一样
String file = ReadFileTest.class.getResource("/4.txt").getFile();
// String file = ReadFileTest.class.getClassLoader().getResource("/4.txt").getFile();
作者:
陈欢
时间:
2012-7-20 22:16
不好意思,刚才点错了
作者:
陈欢
时间:
2012-7-20 22:16
不好意思,刚才点错了
作者:
陈欢
时间:
2012-7-20 22:24
本帖最后由 陈欢 于 2012-7-20 22:27 编辑
这两个的区别:
1.FileTest.class.getResource("")
得到的是当前类FileTest.class文件的URI目录。不包括自己!
如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/com/test/
2.FileTest.class.getClassLoader().getResource("")
得到的也是当前ClassPath的绝对URI路径。
如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
建议:不要使用硬编码的绝对路径。因为,我们完全可以使用ClassLoader类的getResource("")方法得到当前classpath的绝对路径。
使用硬编码的绝对路径是完全没有必要的!程序将无法移植!
如果你一定要指定一个绝对路径,那么使用配置文件,也比硬编码要好得多!
当然,我还是推荐你使用程序得到classpath的绝对路径来拼资源的绝对路径
作者:
rslheima
时间:
2012-7-20 22:42
一个主要用于相对与一个object取资源,而另一个用于取相对于classpath的资源,用的是绝对路径.
参考资料:http://hi.baidu.com/devilzy_boy/item/6ec8d4f4ec5b16db6325d272
作者:
rslheima
时间:
2012-7-20 22:43
一个主要用于相对与一个object取资源,而另一个用于取相对于classpath的资源,用的是绝对路径.
参考资料:http://hi.baidu.com/devilzy_boy/item/6ec8d4f4ec5b16db6325d272
作者:
黑马高明辉
时间:
2012-7-20 22:52
public void demo4() throws IOException {
String file = Test.class.getResource("info.txt").getFile();
// String file = Test.class.getResource("/proxy/aopFramework/info.txt").getFile();
// String file = Test.class.getClassLoader().getResource("proxy/aopFramework/info.txt").getFile();
System.out.println(file);
BufferedReader reader = new BufferedReader(new FileReader(file));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
这是我试验的代码,
String file = Test.class.getResource("info.txt").getFile();这行的代的写相对路径,它会去找到Test类的包,并且默认info.txt是相对于Test的包而言的,所以会自动去找。
或者写成String file = Test.class.getResource("/proxy/aopFramework/info.txt").getFile();表示绝对路径。
String file = Test.class.getClassLoader().getResource("proxy/aopFramework/info.txt").getFile();这种写发info.txt要和类文件放在同一个目录即classpath目录下。并且不能使用绝对路径。
总之,两者都是调用的classLoader来加载文件的。
作者:
黑马高明辉
时间:
2012-7-23 15:43
找了好久……
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2