Java或者JAR包获取读取资源文件的路径的问题总结

这里分为具体两种: 

第一种:资源文件为一般后缀文件 

第二种:资源文件为图片文件 

【NO1】第一种 

  使用这行代码可以获取class类的根目录的路径 

  String path =Thread.currentThread().getContextClassLoader().getResource("").getPath(); 

例子:我用的开发软件MyEclipse 6.5 

假设项目文件夹如下: 

   files———bin——core(生成class包) 

       |               |         |——Main.class(生成的class文件) 

       |               | 

       |               |——resource( 生成资源文件夹) 

       |                         |——a.bat 

       |                         |——b.png 

       |———src——core(源包)  

                   |             |—— Main.java(源代码) 

                   | 

                   |——resource(源资源文件夹)  

                                 |——a.bat 

                                 |——b.png 

//源代码Main.java 

//============================================================ 

package core; 
import java.io.File; 

public class Main { 

    public static void main(String[] args){ 
        try{ 
        String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();    //添加 
        File af=new File(path+"/resource"); 
        if(!af.exists()) System.out.println("nullEXIST");; 
        String[] files =af.list(); 
        if(files.length==0) System.out.println("nullLENGTH");; 
        for(int i=0;i<files.length;i++){ 
            if(files[i]!=null)System.out.println(files[i]); 
            else System.out.println("null"); 
        } 
        
        } 
        catch(Exception e){ 
            System.out.println("HugeERROR"); 
        } 
    } 
        

// =============================================================== 

    运行结果: 

a.bat 

b.png   

就对了   

【NO2】第二种 

建议使用下面( 2 )方法,因为(1)jar之后可能出现找不到的问题 (之前我试过出现这种情况) 

这里代码省了 

(1)、你将所有资源打包为epm.jar,你的类位于一个包中:package core;你的图片资源全部放在images文件夹中,而images文件夹也位于core包内。这样的话,最终的路径表现为: 
epm———bin——core(生成class包) 

       |               |         |——Main.class(生成的class文件) 

       |               | 

       |               |——images( 生成资源文件夹) 

       |                         |——system.bat 

       |                         |——background.png 

       |———src——core(源包)  

                   |             |—— Main.java(源代码) 

                   | 

                   |——images(源资源文件夹)  

                                 |——system.bat 

                                 |——background.png 

  可以通过相对路径来访问:        

  java.net.URL imUrl = getClass().getResource("images/background.png"); 
  ImageIcon im = new ImageIcon(imUrl); 

(2)、另一种情况,如果你的类有很多,并且包的结构很复杂,应该把图片放到最外层,让所有的类通过绝对路径来访问该图片 

epm———bin——core(生成class包) 

       |               |         |——Main.class(生成的class文件) 

       |               | 

       |               |——images( 生成资源文件夹) 

       |                         |——system.bat 

       |                         |——background.png 

       |———src——core(源包)  

                   |             |—— Main.java(源代码) 

                   | 

                   |——images(源资源文件夹)  

                                 |——system.bat 

                                 |——background.png 

java.net.URL imUrl = getClass().getResource("/images/background.png"); 
ImageIcon im = new ImageIcon(imgUrl); 

区别非常细微,仅仅是在“images”的前面加了一个反斜杠"/",这个反斜杠就表示根目录,没有反斜杠就表示相对路径。 

Java中获取资源文件

新建一个Java工程,新建一个constants.properties资源文件

Java代码  

  1. userName = snail  
  2. age = 24  
  3. password = 123456  

然后我们再建立一个类Constans.java,附上静态变量

Java代码  

  1. package testproperties;  
  2.   
  3. public  class Constants {  
  4.   
  5.     public static String userName;  
  6.     public static int age;  
  7.     public static String password;   
  8. }  

接下来的工作就尝试着如何获取properties文件类定义的姓名、年龄和密码了,新建一个InitProperties类

package testproperties;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

public class InitProperties {
	  private static final long serialVersionUID = -2106230733190196852L;

	  public void init()
	  {
	    System.out.println("#############################加载配置信息###########################");
	    Properties prop = new Properties();

	    //得到的是编译后的bin的目录Class.class.getClass().getResource("/").getPath();

	    //这个是绝对路径
//	    String filepath = "E:\\myeclipse6\\workspace\\XXX\\src\\testproperties\\constants.properties";

	    String filepath = Class.class.getClass().getResource("/").getPath()+"/testproperties/constants.properties" ;

	    System.out.println("++++++++++++"+Class.class.getClass().getResource("/").getPath()+"+++++++++++++");

	    FileInputStream fis = null;
	    try {
	      fis = new FileInputStream(filepath);
	      prop.load(fis);
	      Constants.userName = prop.getProperty("userName");
	      Constants.age = Integer.parseInt(prop.getProperty("age"));
	      Constants.password = prop.getProperty("password");
	      System.out.println(Constants.userName+Constants.age+Constants.password);;
	      System.out.println("#############################加载配置信息完成###########################");
	    }
	    catch (IOException e) {
	      System.out.println("加载constants.properties文件失败,文件不存在后者路径不正确! ");
	      e.printStackTrace();
	    }
	  }
	  public static void main(String[] args) {
		  InitProperties ip = new InitProperties();
		  ip.init();
	}
}

现在附上集中在jsp、Java、和servlet中获取路径的方法:(引用自http://zhidao.baidu.com/question/86179810.html?fr=qrl&cid=93&index=5

1.jsp中取得路径:

以工程名为TEST为例:

(1)得到包含工程名的当前页面全路径:request.getRequestURI() 
    结果:/TEST/test.jsp 
(2)得到工程名:request.getContextPath() 
    结果:/TEST 
(3)得到当前页面所在目录下全名称:request.getServletPath() 
    结果:如果页面在jsp目录下 /TEST/jsp/test.jsp 
(4)得到页面所在服务器的全路径:application.getRealPath("页面.jsp") 
    结果:D:\resin\webapps\TEST\test.jsp 
(5)得到页面所在服务器的绝对路径:absPath=new java.io.File(application.getRealPath(request.getRequestURI())).getParent(); 
    结果:D:\resin\webapps\TEST

 

2.在类中取得路径:

(1)类的绝对路径:Class.class.getClass().getResource("/").getPath() 
    结果:D:/TEST/WebRoot/WEB-INF/classes/pack/ 
(2)得到工程的路径:System.getProperty("user.dir") 
    结果:D:\TEST

 

3.在Servlet中取得路径:

(1)得到工程目录:request.getSession().getServletContext().getRealPath("") 参数可具体到包名。 
    结果:E:\Tomcat\webapps\TEST 
(2)得到IE地址栏地址:request.getRequestURL() 
    结果:http://localhost:8080/TEST/test 
(3)得到相对地址:request.getRequestURI() 
    结果:/TEST/test

时间: 2024-08-03 00:05:43

Java或者JAR包获取读取资源文件的路径的问题总结的相关文章

java 读取jar包中的资源文件实例程序

1) ClassLoader是abstract的,不可能实例化对象,更加不可能通过ClassLoader调用上面两个方法.所以我们真正写代码的时候,是通过Class类中的getResource()和getResourceAsStream()方法,这两个方法会委托ClassLoader中的getResource()和getResourceAsStream()方法 .好了,现在我们重新写一段Resource代码,来看看上面那段费解的话是什么意思了: Java代码  代码如下 复制代码 package

linux下 java打成jar包运行,压缩文件失败

问题描述 linux下 java打成jar包运行,压缩文件失败 linux下 java打成jar包运行,压缩文件失败(java程序内有压缩文件处理).但是在linux下,用eclipse执行的话,压缩文件成功.求大神!!!! 解决方案 还是要查看你的具体错误信息,是不是命令路径等没设置跟Eclipse一样

关于当程序打包成jar包后.spring资源文件未读取到的问题

问题描述 功能描述:现在我开发的一个服务端的程序,开启一个Socket监听,接受客户端的Socket连接,并将传入的信息存入数据库系统采用框架:Spring+Hibernate其中Spring的主要配置文件为ApplicationContext.xml然后每个模块中也一个spring的xml配置文件,这些配置文件是通过ApplicationContext.xml通过<importresource="classpath*:com/xxx/**/*.xml"/>标签导入进来的.

dom4j从jar包中读取xml文件的方法_java

进行封装的时候,我们常常需要用xml来定义一些规范,在单独运行读取的时候当然不会有问题,但这些xml是往往是放在jar包里的,这样一来,这些东西就找不出来了.文中用到的xml定义如下: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?><ACCESOS> <item>  <SOCIO name="adsf">   <NUMERO>00045

java读取资源文件的五种方式

package com.zkn.newlearn.others; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import com.zkn.newlearn.gof.singleton.SimpleFactoryTest01; /** * 读取资源文件的五种方式 * @author zkn */ public class ClassReadResourceDemo { p

执行可运行jar包时读取jar包中的文件

可运行的jar包,都会在META-INF\MANIFEST.MF中设置Main-Class. 那么如何在jar包中读取其中的某个文件呢? 注意:是在可运行的jar包中读取该jar包中的文件,也就是说读取jar包中文件的这段代码在该jar包中  TestUrl类内容如下: Java代码   import java.io.IOException;   import java.io.InputStream;   import java.net.MalformedURLException;   impo

java生成jar包的方法_java

本文实例讲述了java生成jar包的方法,是非常实用的技巧.分享给大家供大家参考.具体分析如下: 很多Java初学者都会有这样的疑问:Java编写的application程序是否能够最终形成一个类似于exe一样的可执行文件,难道就只能用命令行运行? 通常来说有两种方法,一种是制作一个可执行的JAR文件包,然后就可以像.chm文档一样双击运行了:而另一种是使用JET来进行编译.但是JET是要用钱买的,而且据说JET也不是能把所有的Java程序都编译成执行文件,性能也要打些折扣.所以,使用制作可执行

intelliJ idea读取资源文件

原文:intelliJ idea读取资源文件 原文地址 http://yanwushu.sinaapp.com/intellij-idea_raed_resource_file/ 官方文档 以下是jetbrain官网对idea中资源文件的解释,文章最后有此文的链接. 这里的资源文件包括properties文件.图片.dtd文件.xml文件.这些文件被放在项目的classpath路径下.通常可以使用以下方法来获取他们: ResourceBundle.getBundle() //获取properti

Android读取资源文件的方法

Android读取资源文件的方法 1.放入到资源文件夹里面,也就是所创建android工程的res下面. 我们可以在里面建立文件夹,放置我们要读取的文件. 例如:res里面建立目录raw,将要读取的文件abc.bin放入到该文件夹下,此时通过 openRawResource()方法即可读取.代码为 InputStream is = getResources().openRawResource(R.raw.abc); 只要获取InputStream,一切就好办了! 注意:res下面的目录名字是有讲