作者dream1124 (全新开始)
看板java
标题[问题] eclipse 内载入资源的路径
时间Tue Oct 1 03:31:25 2013
想请问一下,为什麽在 eclipse 内部一样使用
Thread.currentThread().getClassLoader().getResourceAsStream() 载入资源,
自己写的程式可以成功载入档案F,但是程式里面所呼叫的函式库,却无法读取F呢?
状况是这样的,我在 eclipse 里面开一个专案练习使用 log4j 1.2,
log4j 的函式库 .jar 放在专案 workspace 外面的资料夹里,
在专案的 buildpath 设定里面以 user lib 的方式载入。
Log4j官网上会教我们用 PropertyConfigurator.configure(String str) 载入设定档
在我练习的专案里面,写下上面这行程式码的类别 HelloLog4j.class
在package test.fileAppender里面,设定档 log4j.properties
与 HelloLog4j.class 在相同实体目录里面。
但是当我喂 "test/fileAppender/log4j.properties" 字串 StrA
或是 "./test/fileAppender/log4j.properties" 字串 StrB
给 PropertyConfigurator.configure() 方法,都会丢出 FileNotFoundException。
这我就觉得奇怪了,查询 Log4j 官网 FAQ (
http://goo.gl/ijvqoe),
发现它是以 Thread.currentThread().getClassLoader().getResourceAsStream()
载入设定档的....
但是自己实验後,发现如果自行在 HelloLog4j.class 调用以上载入档案的方法,
先建立 Property 类别的实例再丢给 PropertyConfigurator.configure(),
那麽不管载入档案的路径参数是 StrA 或 StrB ,都能正常读入 Log4j.properties,
但 Log4j 函式库却无法只靠路径字串就读取到设定档....
为什麽一样使用
Thread.currentThread().getClassLoader().getResourceAsStream() 载入资源,
自己写的程式可以成功载入,但是程式里面所呼叫的函式库,却无法呢?
我翻找到 eclipse 的 FAQ (
http://goo.gl/zk0ayd)
推测有可能是因为 eclipse 使用不同的 ClassLoader 载入专案的函式库,
以致於 classpath 不同,但我不知道自己想法对不对呢?
请问有人可以解惑一下吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.168.76.91
此问题已解决,官网没改害我浪费两天怀疑自己是否观念有错 QQ
查看原始码发现 Log4j 的 PropertyConfigurator(String str)
根本就不是用 ClassLoader 载入档案的,而是使用 FileInputStream 读档,
它直接把 str 当成建构式的参数拿去建构 FileInputStream 的实例。
这个 str 必须是系统绝对路径才能正常读档,难怪在专案里面参数怎麽给都读不到,
我错怪 eclipse 了 QQ
1F:→ swpoker:挖~我都放在classpath底下~算有读到就好~XD 10/01 09:20
2F:推 gmoz:可以放相对路径阿@@ 你工作目录有设定吗 10/01 19:29
的确是可以设定工作目录让FileInputStream读到,
但重点是官网说明没讲清楚,欺骗我的感情。
明明实作是直接拿 str 建构 FileInputStream,讲的却是用 ClassLoader 载入
这样设定的方法就完全不同啊~
※ 编辑: dream1124 来自: 118.168.95.2 (10/01 21:38)