Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2579404
  • 博文数量: 320
  • 博客积分: 9650
  • 博客等级: 中将
  • 技术积分: 3886
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-27 21:05
文章分类

全部博文(320)

文章存档

2024年(1)

2017年(5)

2016年(10)

2015年(3)

2014年(3)

2013年(10)

2012年(26)

2011年(67)

2010年(186)

2009年(9)

分类: Java

2010-05-11 17:15:43

这里分为具体两种:
第一种:资源文件为一般后缀文件
第二种:资源文件为图片文件
【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            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”的前面加了一个反斜杠"/",这个反斜杠就表示根目录,没有反斜杠就表示相对路径。

这些都是细心的问题了......

 
阅读(10279) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~