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或者JAR包获取读取资源文件的路径的问题总结,如需转载请自行联系原博主。

目录
相关文章
|
4天前
|
Java Maven
向 Maven 中央仓库上传一个修改过的基于jeecg的autoPOI的 jar包记录(一)
向 Maven 中央仓库上传一个修改过的基于jeecg的autoPOI的 jar包记录
16 0
|
3天前
|
JavaScript 前端开发 Java
java项目的打包将vue放到.jar里面部署
java项目的打包将vue放到.jar里面部署
|
4天前
|
Java Go Maven
向 Maven 中央仓库上传一个修改过的基于jeecg的autoPOI的 jar包记录(二)
向 Maven 中央仓库上传一个修改过的基于jeecg的autoPOI的 jar包记录
10 0
|
6天前
|
前端开发 Java Linux
宝塔Linux:部署His医疗项目通过jar包的方式
宝塔Linux:部署His医疗项目通过jar包的方式
|
9天前
|
安全 Java Docker
|
12天前
|
存储 Java 数据格式
Java实战:轻松掌握文件重命名与路径提取技巧
Java实战:轻松掌握文件重命名与路径提取技巧
19 0
|
12天前
|
Java
如何解决使用若依前后端分离打包部署到服务器上后主包无法找到从包中的文件的问题?如何在 Java 代码中访问 jar 包中的资源文件?
如何解决使用若依前后端分离打包部署到服务器上后主包无法找到从包中的文件的问题?如何在 Java 代码中访问 jar 包中的资源文件?
49 0
|
14天前
|
Java Maven
springboot jar包启动提示没有主清单属性
springboot jar包启动提示没有主清单属性
|
14天前
|
Java Maven
【亮剑】Java项目开发中常遇到Jar 包依赖冲突问题,主要由不同版本库、循环依赖、传递依赖和依赖范围不当引起
【4月更文挑战第30天】Java项目开发中常遇到依赖冲突问题,主要由不同版本库、循环依赖、传递依赖和依赖范围不当引起。解决冲突需分析依赖树、定位冲突源、调整类加载顺序等。方法包括排除冲突依赖、统一管理版本、限定依赖范围、合并冲突类、升级降级库版本及拆分模块。关注依赖关系,及时解决冲突,保障项目稳定运行。
|
15天前
|
分布式计算 DataWorks Java
DataWorks产品使用合集之阿里云DataWorks专有云环境下,上传MaxCompute的UDF(用户自定义函数)的JAR包的步骤如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
22 0