Java中用Class.getResource把图片自动打包进Jar

Class和ClassLoader的getResource方法详解与源码分析 classpath Java中有两个classpath,一个是bootrap classpath,另一个是classpath。 classpath有如下两种形式 [4]: JAR files(JAR文件的全路径),and Paths to the top of package hierarchies.(顶级目录路径) bootrap classpath boot class path对应于启动类加载器,根据类加载的双亲委派模型,Java程序运行时首先会由启动类加载器加载boot class path下的 阅读详情

转载自:http://gavin-chen.iteye.com/blog/261151


用JAVA获取文件,听似简单,但对于很多像我这样的新人来说,还是掌握颇浅,用起来感觉颇深,大常最经常用的,就是用JAVA的File类,如要取得c:/test.txt文件,就会这样用File file = new File("c:/test.txt");这样用有什么问题,相信大家都知道,就是路径硬编码,对于JAVA精神来说,应用应该一次成型,到处可用,并且从现实应用来讲,最终生成的应用也会部署到Windows外的操作系统中,对于linux来说,在应用中用了c:/这样的字样,就是失败,所以,我们应该尽量避免使用硬编码,即直接使用绝对路径。

在Servlet应用中,有一个getRealPath(String str)的方法,这个方法尽管也可以动态地获得文件的路径,不秘直接手写绝对路径,但这也是一个不被建议使用的方法,那么,我们有什么方法可以更好地获得文件呢?

那就是Class.getResource()与Class.getResourceAsStream()方法,但很多人还是不太懂它的用法,因为很多人(比如不久前的我)都不知道应该传怎么样的参数给它,当然,有些人己经用得如火纯青,这些人是不需要照顾的,在此仅给不会或者还不是很熟的人解释一点点。

比如我们有以下目录:

|--project
    |--src
        |--javaapplication
            |--Test.java
            |--file1.txt
        |--file2.txt
    |--build 
        |--javaapplication
            |--Test.class
            |--file3.txt
        |--file4.txt

在上面的目录中,有一个src目录,这是JAVA源文件的目录,有一个build目录,这是JAVA编译后文件(.class文件等)的存放目录
那么,我们在Test类中应该如何分别获得
file1.txt  file2.txt  file3.txt  file4.txt这四个文件呢?
 
首先讲file3.txt与file4.txt
file3.txt:
方法一:File file3 = new File(Test.class.getResource("file3.txt").getFile());
方法二:File file3 = new File(Test.class.getResource("/javaapplication/file3.txt").getFile());
方法三:File file3 = new File(Test.class.getClassLoader().getResource("javaapplication/file3.txt").getFile());
 
file4.txt:
方法一:File file4 = new File(Test.class.getResource("/file4.txt").getFile());
方法二:File file4 = new File(Test.class.getClassLoader().getResource("file4.txt").getFile());
 
很好,我们可以有多种方法选择,但是file1与file2文件呢?如何获得?
答案是,你只能写上它们的绝对路径,不能像file3与file4一样用class.getResource()这种方法获得,它们的获取方法如下
假如整个project目录放在c:/下,那么file1与file2的获取方法分别为
file1.txt
方法一:File file1 = new File("c:/project/src/javaapplication/file1.txt");
方法二:。。。没有
 
file2.txt
方法一:File file2 = new File("c:/project/src/file2.txt");
方法二:。。。也没有
 
总结一下,就是你想获得文件,你得从最终生成的.class文件为着手点,不要以.java文件的路径为出发点,因为真正使用的就是.class,不会拿个.java文件就使用,因为java是编译型语言嘛
 
至于getResouce()方法的参数,你以class为出发点,再结合相对路径的概念,就可以准确地定位资源文件了,至于它的根目录嘛,你用不同的IDE build出来是不同的位置下的,不过都是以顶层package作为根目录,比如在Web应用中,有一个WEB-INF的目录,WEB-INF目录里面除了web.xml文件外,还有一个classes目录,没错了,它就是你这个WEB应用的package的顶层目录,也是所有.class的根目录“/”,假如clasaes目录下面有一个file.txt文件,它的相对路径就是"/file.txt",如果相对路径不是以"/"开头,那么它就是相对于.class的路径。。
 
还有一个getResourceAsStream()方法,参数是与getResouce()方法是一样的,它相当于你用getResource()取得File文件后,再new InputStream(file)一样的结果

【填坑向】Linux获取Java程序resource下的文件路径(这次的坑好像没填住…… (˶‾᷄ ⁻̫ ‾᷅˵)痛定思痛,目前得出的结论就是,由于package后要获取的文件变成了jar包里的一份子,因此系统磁盘中找不到一个路径可以直接指向它,但是由于他在jar包中,是可以通过流的方式获取到文件内容的,如果真的非要获取到文件地址,就新建一个文件,把读取到的流写入,在这种情况下,就可以获取到这个新文件的磁盘路径 由于我的文件较大,读取写入新建文件并不合适,而我这边又是需要通过路径来调用第三方库的,因此。感觉貌似可以了,生产环境需要package,先本地打包试下,再调用下试试(b_d)。 阅读详情

相关推荐

NXP ChessDE的安装和激活

如果客户申请的是试用版,那么一份为期 30 天的 License 将会发送申请人的账号或邮箱中,客户使用该文件进行安装即可。② 将“VENDOR snpslmd /path/to/snpslmd”中的“/path/to/snpslmd”替换成 snpslmd.exe 实际存放路径(位于 SCL 安装目录下的 win32\bin 文件夹中,默认安装的情况下就是“VENDOR snpslmd C:\Synopsys\SCL\<version>\win32\bin\snpslmd.exe”)。

weixin_47351160的博客 2044

Java中Class.getResource方法

getResource是java.lang.Class的方法,也就是由字节码对象调用。  getResource接受一个字符串参数,如果以”/”开头,就在classpath根目录下找(不会递归查找子目录),如果不以”/”开头,就在调用getResource的字节码对象所在目录下找(同样不会递归查找子目录)。 概念理解:classpath,指的是编译后的class文件、xml、properties...

藤叶香来 1万+

Class.getResource()、ClassLoader.getResource()源码解读

Class.getResource()、ClassLoader.getResource()源码解读

大数据开发、JAVA开发、人工智能AI 4384

手把手教你用Isaac Sim 8打造逼真光影效果:参数设置与场景应用

本文详细介绍了如何使用Isaac Sim 8打造逼真光影效果,涵盖基础参数设置、高级材质交互、专业级灯光造型技法以及复杂场景的灯光布局策略。通过实战案例和参数调优技巧,帮助用户提升虚拟场景的视觉表现,适用于数字孪生、虚拟仿真和影视特效等领域。

weixin_30836759的博客 80

Navicat Premium 12 永久激活保姆级教程(附最新补丁下载)

本文详细介绍了Navicat Premium 12的高效使用方法,从安装配置到高级功能应用,帮助用户充分发挥这款数据库管理工具的全部潜力。内容包括数据库连接管理、数据查询与编辑、数据同步与结构对比等核心功能,以及性能优化和最佳实践建议,提升数据库管理效率。

weixin_28834765的博客 643

java中Class.getResource用法

  用JAVA获取文件,听似简单,但对于很多像我这样的新人来说,还是掌握颇浅,用起来感觉颇深,大常最经常用的,就是用JAVA的File类,如要取得c:/test.txt文件,就会这样用File file = new File("c:/test.txt");这样用有什么问题,相信大家都知道,就是路径硬编码,对于JAVA精神来说,应用应该一次成型,到处可用,并且从现实应用来讲,最终生成的应用也会部署到...

爱工作,爱生活 878

Cadence IC5141保姆级教程:Bandgap电路四大仿真(稳定性/噪声/启动/PSRR)完整流程与调参心得

本文提供Cadence IC5141中Bandgap电路的四大仿真(稳定性仿真、噪声仿真、启动仿真、PSRR仿真)的完整流程与调参心得。从原理图检查到ADE L配置,详细解析各仿真步骤的关键参数设置与优化策略,帮助工程师高效完成电路设计与性能调优。

weixin_30399821的博客 1651

JAVA 分页查询

java 分页查询

sungencheng的博客 3312

S32K144-EB tresos GPT驱动模块配置详解

GPT通用计时器,在S32K144这款芯片上,有4个外设模块,最多38各通道可以作为GTP的计时器通道,具体详细的大家可以去看芯片手册。这里咱们只管怎么用EB来配置GPT驱动。

小胡同学的工程师学习之路 3866

DSMA时序修复避坑指南:当Setup和Hold互卡时,除了调Margin还能做什么?

本文深入探讨DSMA时序修复中的Setup与Hold互锁问题,提供7种高阶策略,包括优先级判断、高级参数组合、单元类型智能替换等,帮助工程师突破时序收敛瓶颈。特别针对fix_eco_timing命令的隐藏参数和物理协同优化进行详细解析,助力芯片设计实现时序收敛。

weixin_30162121的博客 296

Java中用Class.getResource把图片自动打包进Jar 如何用相对路径获得图片

用JAVA获取文件,听似简单,但对于很多像我这样的新人来说,还是掌握颇浅,用起来感觉颇深,大常最经常用的,就是用JAVA的File类,如要取得c:/test.txt文件,就会这样用File file = new File("c:/test.txt");这样用有什么问题,相信大家都知道,就是路径硬编码,对于JAVA精神来说,应用应该一次成型,到处可用,并且从现实应用来讲,最终生成的应用也会部署到Wi

galaxy的博客 2914

Three.js 完整实战项目:构建一个 3D 商品展示空间

Three.js 作为强大的 WebGL 框架,广泛应用于交互式 3D 场景开发,尤其适合创建沉浸式商品展示空间。本文将通过一个完整的实战项目,展示如何构建一个 3D 商品展示空间,涵盖项目架构、资源组织、多模型切换、交互热点绑定、移动端适配和帧率优化。项目以展示虚拟商品(如家具或电子产品)为核心,结合用户交互,基于 Vite、TypeScript 和 Tailwind CSS,支持 ES Modules,确保响应式布局,遵循 WCAG 2.1 可访问性标准。本文适合希望通过综合项目掌握 Three.js

zimin的专栏 1463

JAVA如何在导出jar时可以将资源图片一起打包在jar中

JAVA如何在导出jar时可以将资源图片一起打包在jar中

王汝鑫的博客 3889

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Java Swing桌面项目打包成可执行jar

参考AI助手,解决问题快多了。

ximen502的专栏 2811

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

getresource java_java中Class.getResource用法

用JAVA获取文件,听似简单,但对于很多像我这样的新人来说,还是掌握颇浅,用起来感觉颇深,大常最经常用的,就是用JAVA的File类,如要 取得c:/test.txt文件,就会这样用File file = new File("c:/test.txt");这样用有什么问题,相信大家都知道,就是路径硬编码,对于JAVA精神来说,应用应该一次成型,到处可用,并且 从现实应用来讲,最终生成的应用也会部署到...

weixin_32067105的博客 224

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

如何读取jar包中的图片?

如何读取jar包中的图片? ‍一、首先,在eclipse中正常读取图片(用swing图形界面来测试)。‍ 1、目录结构如下图所示: test为工程名,测试类为photo.ReadTest,图片文件为img\test.png。 2、代码如下所示: packagephoto; im...

chijie6848的博客 2479

java导出图片jar,Eclipse下导出java程序可执行的jar包图片无法显示问题的一种解决方法...

说明:在eclipse中运行java程序的时候一切正常,可是当把jar包导出的时候却发现图片没法显示,这估计是java程序的各种配置和路径问题所导致,后来找到一种解决方法,供遇到这方面问题的学习java程序的鞋同参考:Java项目下的目录结构如下: 其中class类放在包:package accpedu; (即实际是在如上bin/accpedu文件夹下面)通过下面的方法来引用图片时,在eclips...

weixin_34957720的博客 557

Java JAR打包全攻略:从手动打包到Maven/Gradle自动化构建

在Java开发中,打包是将源代码和资源文件封装为可分发格式的关键步骤。其核心原理是通过ZIP格式的归档文件,结合清单文件(MANIFEST.MF)定义主类和类路径,实现程序的独立运行。这项技术的价值在于简化了Java应用的部署流程,使得开发者能够将复杂的项目结构转化为单一的可执行文件。在实际应用场景中,无论是桌面应用、工具脚本还是库文件分发,打包都是不可或缺的环节。本文聚焦于JAR文件打包,详细解析了手动打包的底层机制,并深入探讨了如何利用Maven和Gradle等构建工具实现自动化打包,帮助开发者掌握从源

weixin_34357887的博客 389

Java中资源(resource)获取 Class.getResource() & ClassLoader.getResource()

Java中的资源可以是一个图片,xml文件,音频等等形式的文件,在开发的过程中尤其是对xml文件的使用相当频繁。在Java中,类Class和ClassLoader中提供了相应的方法去定位这些资源,如getResource()等方法。       资源名       完整的资源名也就是路径有绝对和相对之分,虽然他们都可以表示同一个资源文件,但使用起来确实有一定的差别。 在Java中,以反斜线(/

计忆 1万+

从Jar包获取资源的方法

jungleford如是说    可能有不少初学者会有这样的困惑(以前我也有过):在你的代码里调用了一些资源文件,如图片,音乐等,在调试环境或单独运行的时候可以正常显示或播放,而一旦打包到jar文件中,这些东东就再也出不来了,除非把这个jar放到原来未打包以前的目录下,但通常jar是单独发布的。这里介绍一个解决这类问题的方法。getResource和getResourceAsStream    问

Jungleford's Home 优快云 分舵 1663

JAVA运行时用jar里错误资源,java打成jar包后,class,getResource()出现null指针异常

1、SqlHelper.java有包路径没?如果有,是不是类似于com.db.jdbc?不管怎么办,你SqlHelper.class.getResourceAsStream("/mysql.properties");如果你的配置文件不是在包的根路径,这句话里面路径就不可以像你上面那样写。例如:如果你的配置文件放在com.db.jdbc包里面,那么你的代码就要修改成这样才正确的:SqlHelper....

weixin_39958137的博客 1000

java jar包 资源_从java jar文件包中读资源的常用方法

从java jar文件包中读资源的常用方法2007-11-27eNet&Ciweek可能有不少初学者会有这样的困惑:在你的代码里调用了一些资源文件,如图片,音乐等,在调试环境或单独运行的时候可以正常显示或播放,而一旦打包到jar文件中,这些东东就再也出不来了,除非把这个jar放到原来未打包以前的目录下,但通常jar是单独发布的。这里介绍一个解决这类问题的方法。getResource和get...

weixin_29664739的博客 234

java jar 找不到文件_jar包中File 文件找不到的异常分析与解决

源链接:http://hxraid.iteye.com/blog/483115#comments我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等)。在单独运行的时候这些简单的处理当然不会有问题。但是,如果我们把代码打成一个jar包以后,即使将资源文件一并打包,这些东西也找不出来了。看看下面的代码:Java代码//源代码1:packageedu.hxraid;importjava.io...

weixin_32285357的博客 2652

java jar包 资源_[Java基础] 深入jar包:从jar包中读取资源文件

我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等)。在单独运行的时候这些简单的处理当然不会有问题。但是,如果我们把代码打成一个jar包以后,即使将资源文件一并打包,这些东西也找不出来了。看看下面的代码://源代码1:packageedu.hxraid;import java.io.*;public classResource {public void getResource() thr...

weixin_32192681的博客 177
上一篇: Java时区TimeZone与操作系统时区不一致
下一篇: Java爬统计局12位区划代码
KingLearnJava
博客等级 码龄12年 93粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值