读取jar包中的XML出问题

时间:2022-09-14 09:18:09
问题大概是这样的,就是一个项目中用dom4j读取XML的数据没问题,我把XML直接放在项目的跟路径下,用的是相对路径读取的 如new File("./xxx.xml"),现在将这个项目打包,xml被打入到包中,现在将这个包导入到其他项目中,运行包中的类读取xml的方法时就报FileNotFoundException错误,该怎么解决了,谢谢各位了

10 个解决方案

#1


这个肯定是包路径的问题撒

#2


getClass().getResourceAsStream("/xxx.xml");

#3


很多编程的习惯是不好的,直接使用使用相对路径或者绝对路径访问本机文件就是一个,去而代之的是getClass().getResource("/xxx.xml")或者getClass().getResourceAsStream("/xxx.xml");

#4


非常感谢楼上的方法 解决了 不过我这多加了一个classLoader this.getClass().getClassLoader().getResourceAsStream("/xxx.xml")

那我要是读取jar的class怎么解决了,原项目中的是配置entity类的包路径,如:net.csdn.java.entity,然后转换成Bin目录中的位置,遍历其中扩展名为.class的文件,依次反射,现在这些class打在Jar中了该怎么弄了,刚试了InputStream url=this.getClass().getClassLoader().getResourceAsStream("net/csdn/java/entity"),原项目中可以读取entity里面的文件,打成包之后就报空指针,该怎么解决了

#5


不太清楚具体情况,也不是很清楚怎么一回事
引用 4 楼 sky254541843 的回复:
非常感谢楼上的方法 解决了 不过我这多加了一个classLoader this.getClass().getClassLoader().getResourceAsStream("/xxx.xml")

那我要是读取jar的class怎么解决了,原项目中的是配置entity类的包路径,如:net.csdn.java.entity,然后转换成Bin目录中的位置,遍历其中扩展名为.class的文件……

#6


引用 5 楼 ioe_gaoyong 的回复:
不太清楚具体情况,也不是很清楚怎么一回事
引用 4 楼 sky254541843 的回复:

非常感谢楼上的方法 解决了 不过我这多加了一个classLoader this.getClass().getClassLoader().getResourceAsStream("/xxx.xml")

那我要是读取jar的class怎么解决了,原项目中的是配置entity类的包路径,如:net……

就是我之前没打包之前通过读取类似net.csdn.java.entity包中的类,然后都反射出来,现在这个项目打包了,不好读取jar文件net.csdn.java.entity包中的类名

#7


如果项目打包了,将Jar文件添加到新的项目里面,可以首先将想反射的类名加载到JVM当中,然后利用反射处理Class.forName()或其他方法获得对应类的Class没任何问题啊,你想怎么干?

#8


Class.forName(),是可以,但前提是得知道类的全路径名称,如net.csdn.java.entity.bbs;现在net.csdn.java.entity这个包中的类名及个数都是未知的,我得必须先读出里面的类名,才能反射

#9


老大,java反射肯定要有类名,没有类名不可能反射。如果能,那还不乱了套了。

没有好的方法通过程序能搞到类名,除非你自己写个方法,解析jar包里面所有的class文件的名称获得,不过这个也是个思路,问题是你解析了之后,怎么知道哪个类名是你想反射的类,哪个又不是呢?

引用 8 楼 sky254541843 的回复:
Class.forName(),是可以,但前提是得知道类的全路径名称,如net.csdn.java.entity.bbs;现在net.csdn.java.entity这个包中的类名及个数都是未知的,我得必须先读出里面的类名,才能反射

#10


读出jar中net.csdn.java.entity包中的.class就可以了,你这个方法确实是个思路,非常感谢你给我解答这么多

#1


这个肯定是包路径的问题撒

#2


getClass().getResourceAsStream("/xxx.xml");

#3


很多编程的习惯是不好的,直接使用使用相对路径或者绝对路径访问本机文件就是一个,去而代之的是getClass().getResource("/xxx.xml")或者getClass().getResourceAsStream("/xxx.xml");

#4


非常感谢楼上的方法 解决了 不过我这多加了一个classLoader this.getClass().getClassLoader().getResourceAsStream("/xxx.xml")

那我要是读取jar的class怎么解决了,原项目中的是配置entity类的包路径,如:net.csdn.java.entity,然后转换成Bin目录中的位置,遍历其中扩展名为.class的文件,依次反射,现在这些class打在Jar中了该怎么弄了,刚试了InputStream url=this.getClass().getClassLoader().getResourceAsStream("net/csdn/java/entity"),原项目中可以读取entity里面的文件,打成包之后就报空指针,该怎么解决了

#5


不太清楚具体情况,也不是很清楚怎么一回事
引用 4 楼 sky254541843 的回复:
非常感谢楼上的方法 解决了 不过我这多加了一个classLoader this.getClass().getClassLoader().getResourceAsStream("/xxx.xml")

那我要是读取jar的class怎么解决了,原项目中的是配置entity类的包路径,如:net.csdn.java.entity,然后转换成Bin目录中的位置,遍历其中扩展名为.class的文件……

#6


引用 5 楼 ioe_gaoyong 的回复:
不太清楚具体情况,也不是很清楚怎么一回事
引用 4 楼 sky254541843 的回复:

非常感谢楼上的方法 解决了 不过我这多加了一个classLoader this.getClass().getClassLoader().getResourceAsStream("/xxx.xml")

那我要是读取jar的class怎么解决了,原项目中的是配置entity类的包路径,如:net……

就是我之前没打包之前通过读取类似net.csdn.java.entity包中的类,然后都反射出来,现在这个项目打包了,不好读取jar文件net.csdn.java.entity包中的类名

#7


如果项目打包了,将Jar文件添加到新的项目里面,可以首先将想反射的类名加载到JVM当中,然后利用反射处理Class.forName()或其他方法获得对应类的Class没任何问题啊,你想怎么干?

#8


Class.forName(),是可以,但前提是得知道类的全路径名称,如net.csdn.java.entity.bbs;现在net.csdn.java.entity这个包中的类名及个数都是未知的,我得必须先读出里面的类名,才能反射

#9


老大,java反射肯定要有类名,没有类名不可能反射。如果能,那还不乱了套了。

没有好的方法通过程序能搞到类名,除非你自己写个方法,解析jar包里面所有的class文件的名称获得,不过这个也是个思路,问题是你解析了之后,怎么知道哪个类名是你想反射的类,哪个又不是呢?

引用 8 楼 sky254541843 的回复:
Class.forName(),是可以,但前提是得知道类的全路径名称,如net.csdn.java.entity.bbs;现在net.csdn.java.entity这个包中的类名及个数都是未知的,我得必须先读出里面的类名,才能反射

#10


读出jar中net.csdn.java.entity包中的.class就可以了,你这个方法确实是个思路,非常感谢你给我解答这么多