Java路径问题最终解决方案—可定位所有资源的相对路径寻址
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的使用。
假設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
總結
以上是生活随笔為你收集整理的Java路径问题最终解决方案—可定位所有资源的相对路径寻址的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hprofile教程
- 下一篇: 使用单例模式加载properties文件