Java问题:如何在jar包中获取资源文件对象(java.io.File对象)??

开源中国首席蛤蟆精 发布于 2015/05/29 10:32
阅读 5K+
收藏 2

如下图:

(注意:项目打成jar包后就无法获取文件对象了)

加载中
0
MockMan
MockMan
路径问题
开源中国首席蛤蟆精
开源中国首席蛤蟆精
大神,怎么解决? 有没有类似getclassloader.getResourceAsStream这种解决方法的?
0
宅男小何
宅男小何

http://my.oschina.net/lazyp/blog/86986

希望能对你有所帮助

宅男小何
宅男小何
@Shawock 4楼的分享的代码也是获取到一个stream,不是File。
宅男小何
宅男小何
@Shawock 我自己的jar包读取资源文件时安装文章里面说的方法来的,没任何问题哦
开源中国首席蛤蟆精
开源中国首席蛤蟆精
谢谢您的分享!!但是你在这篇文章里面最终也没有得出很好的解决方法啊。 而且4楼那个哥们分享的代码太复杂: http://www.oschina.net/code/snippet_936681_18811
0
MockMan
MockMan
Demo.class.getClassLoader().getResourceAsStream("configs/demo.xml")
MockMan
MockMan
回复 @Shawock : 你的需求更逗比啊
开源中国首席蛤蟆精
开源中国首席蛤蟆精
回复 @站内流言 : 第一种虽然可以,但是感觉代码被破坏了,第二种有点逗比啊,读出来又写回去。。。
MockMan
MockMan
回复 @Shawock : ①放在外部;②通过流写到外部
开源中国首席蛤蟆精
开源中国首席蛤蟆精
回复 @宅男小何 : 我也不想啊,别人提供的方法是File类型的,必须要传递这玩意啊。。。
宅男小何
宅男小何
回复 @Shawock : 别太死板,获取file干嘛?最后还是要封装为stream,获取资源内容吧?
下一页
0
remielxf
remielxf
把配置文件丢一份到引用的工程即可
0
百里屠苏
百里屠苏
路径用  classpath:configs/demo.xml 这样打包之后也不会有问题
开源中国首席蛤蟆精
开源中国首席蛤蟆精
回复 @百里屠苏 : 我上次试了这个,好像不行,因为.getPath()返回的东西里面的格式是:file://*.jar!configs/demo.xml, 这个东西一new就会报错
百里屠苏
百里屠苏
回复 @Shawock : 试试String path =this.getClass().getResource(configs/demo.xml).getPath();File dir = new File(path);
开源中国首席蛤蟆精
开源中国首席蛤蟆精
哥,能上代码不??
0
开源中国首席蛤蟆精
开源中国首席蛤蟆精

引用来自“宅男小何”的评论

http://my.oschina.net/lazyp/blog/86986

希望能对你有所帮助

@宅男小何 哥,你是按照下面哪种方法弄成功了??

0
haffun
haffun

使用Spring core包中的ResourceLoader类加载文件,已经试过是成功的。参考代码

ResourceLoader loader = new DefaultResourceLoader();
try {
File f = loader.getResource("config/demo.xml").getFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>2.5.5</version>
            <scope>provided</scope>
        </dependency>

开源中国首席蛤蟆精
开源中国首席蛤蟆精
配置文件打包到jar里面,文件系统就无法找到了。。。。
开源中国首席蛤蟆精
开源中国首席蛤蟆精
刚才试了您的方法试了下, 报错如下:java.io.FileNotFoundException: class path resource [config/demo.xml] cannot be resolved to absolute file path because it does not reside in the file system.
0
开源中国首席蛤蟆精
开源中国首席蛤蟆精

引用来自“haffun”的评论

使用Spring core包中的ResourceLoader类加载文件,已经试过是成功的。参考代码

ResourceLoader loader = new DefaultResourceLoader();
try {
File f = loader.getResource("config/demo.xml").getFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>2.5.5</version>
            <scope>provided</scope>
        </dependency>

我在stackoverflow上面也找了几个跟我一样的问题,都没啥好的解决方法。普遍的解决方案是获取流写入到一个临时文件中。。

http://stackoverflow.com/questions/3447258/get-file-from-jar

http://stackoverflow.com/questions/2271926/how-to-read-a-file-from-a-jar-file

http://stackoverflow.com/questions/16842306/how-to-read-a-file-from-jar-archive

http://stackoverflow.com/questions/403256/how-do-i-read-a-resource-file-from-a-java-jar-file

0
zigzagroad
zigzagroad
只是读取,那解压缩出来再以File方式使用就可以了,记得最后删除掉,避免产生垃圾文件。
返回顶部
顶部