Java路径问题最终解决方案—可定位所有资源的相对路径寻址

来源:互联网 发布:a卡10.13 hdmi mac 编辑:程序博客网 时间:2024/06/05 19:19

Java路径问题最终解决方案—可定位所有资源的相对路径寻址

@(JAVA)[java]

http://www.cnblogs.com/0616–ataozhijia/p/4094952.html
http://blog.csdn.net/shendl/article/details/1427475

1、在Java项目中,应该通过绝对路径访问文件,以下为访问的常用方法:

第一种方法:

类名.class.getResource("/").getPath()+文件名

第二种方法:

Thread.currentThread().getContextClassLoader().getResource("").getPath()+文件名

现在src目录下的类文件需要访问config目录下的配置文件。

第三种方法:【优先使用】
先把资源文件打包进一个jar包,然后定位jar包中的资源。如何打包请参考maven的使用。

    InputStream is = this.getClass().getResourceAsStream("/ip.mmdb");

假设ip.mmdb放在了jar包的根目录下。

2、使用第一种方法

new FileInputStream(LoadProperties.class.getResource("/").getPath() + "seed.txt");new FileInputStream(MyCrawler.class.getResource("/").getPath() + "search.properties")

假设Jediael项目被部署在E:\Project.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\,则
类名.class.getResource(“/”) 返回file:\E:\Project.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\Jediael\WEB-INF\classes,即类文件的要目录
类名.class.getResource(“”) 返回file:\E:\Project.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\Jediael\WEB-INF\classes\com\jediael\,即类所有的位置
上述2个方法均返回URI的格式,再通过getPath()来获取路径,即将前面的file:\去掉。

3、使用第二种方法

new FileInputStream(Thread.currentThread().getContextClassLoader().getResource("").getPath() + "search.properties")new FileInputStream(Thread.currentThread().getContextClassLoader().getResource("").getPath() + "seed.txt");

二者均返回:

E:\Project\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\Jediael\WEB-INF\classes

推荐使用第二种方法!!

转载自:http://blog.csdn.net/shendl/article/details/1427475

但事实上如果资源文件被打包至一个jar包,上述方法会有问题,应该参考以下方法:
http://www.cnblogs.com/0616–ataozhijia/p/4094952.html

我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等)。在单独运行的时候这些简单的处理当然不会有问题。但是,如果我们把代码打成一个jar包以后,即使将资源文件一并打包,这些东西也找不出来了。看看下面的代码:

//源代码1:package edu.hxraid;import java.io.*;public class Resource {    public  void getResource() throws IOException{        File file=new File("bin/resource/res.txt");        BufferedReader br=new BufferedReader(new FileReader(file));        String s="";        while((s=br.readLine())!=null)            System.out.println(s);    }}    

复制代码

这段代码写在Eclipse建立的java Project中,其目录为:(其中将资源文件res.txt放在了bin目录下,以便打成jar包)
1、src/
src/edu/hxraid/Resource.java
2、bin/
bin/resource/res.txt
bin/edu/hxraid/Resource.class

很显然运行源代码1是能够找到资源文件res.txt。但当我们把整个工程打成jar包以后(ResourceJar.jar),这个jar包内的目录为:
edu/hxraid/Resource.class
resource/res.txt

而这时jar包中Resource.class字节码:ldc

阅读全文
0 0