日期:2014-05-20  浏览次数:20693 次

如何在jar文件里读取外部配置文件
目录结构是有两个文件在同一个目录里
一个是go.jar,一个是config.xml
go.jar的入口函数是里面默认包里的go.class里的

我在go.class里有这样的代码: 
Document document = new SAXReader().read(go.class.getClassLoader().getResourceAsStream("config.xml"));
结果是
Nested exception: java.net.MalformedURLException
  at java.net.URL.<init>(Unknown Source)
  at java.net.URL.<init>(Unknown Source)
  at java.net.URL.<init>(Unknown Source)


如果用"./config.xml"和"../config.xml"都是一样的.

而以前用new File("./config.xml")居然可以读到,但是只能在WINDOWS下,LINUX下就不行了

我需要一种能在WINDOWS和LINUX下都能读取的方法

------解决方案--------------------
linux的我不清楚.../_\
windows上你是不是double click那個jar包啊,這樣的話你程序context的"."就意味着你jar包的當前目錄,如果你在cmd中以(java,javac等沒有加入到%path%中)java的存放目錄以java -jar來運行你的jar包,那麼"."就意味是java.exe的目錄,可以以config.xml的絕對路徑來讀取吧
obj.getClass().getProtectionDomain().getCodeSource().getLocation().getPath()
------解决方案--------------------
linux的读取命令和windows不一样,要写层叠式的路径+读取命令,而且你的文件权限也要达到读的标准,root就不用不说了
------解决方案--------------------
一种方法是你在程序中打印 System.getproperty("user.dir");看在哪个目录下面
------解决方案--------------------
go.class.getClassLoader().getResourceAsStream("config.xml")这个语句执行成功了没有?

将这个文件config.xml 放在一个classpath的路径中,然后用go.class.getClassLoader().getResourceAsStream("/config.xml")应该可以在linux或windows成功读到数据。
------解决方案--------------------
学习..