2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > Java路径问题最终解决方案—可定位所有资源的相对路径寻址

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

时间:2022-09-30 21:14:14

相关推荐

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

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

@(JAVA)[java]

/0616–ataozhijia/p/4094952.html

/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

推荐使用第二种方法!!

转载自:/shendl/article/details/1427475

但事实上如果资源文件被打包至一个jar包,上述方法会有问题,应该参考以下方法:

/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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。