A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 自己玩 黑马帝   /  2012-7-20 22:01  /  1976 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

@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();

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
不好意思,刚才点错了
回复 使用道具 举报
不好意思,刚才点错了
回复 使用道具 举报
本帖最后由 陈欢 于 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的绝对路径来拼资源的绝对路径

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
一个主要用于相对与一个object取资源,而另一个用于取相对于classpath的资源,用的是绝对路径.
参考资料:http://hi.baidu.com/devilzy_boy/item/6ec8d4f4ec5b16db6325d272
回复 使用道具 举报
一个主要用于相对与一个object取资源,而另一个用于取相对于classpath的资源,用的是绝对路径.
参考资料:http://hi.baidu.com/devilzy_boy/item/6ec8d4f4ec5b16db6325d272
回复 使用道具 举报
        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来加载文件的。

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
找了好久……
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马