使用 Groovy 获取代码树中的资源

本文介绍了如何在Groovy中简洁地获取代码树或jar中的资源,对比了Java的标准实现,展示了Groovy的动态机制优势。通过一行代码即可实现原本Java十几行的功能,讨论了在I/O操作中的效率问题和适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先前写 MSN 日志合并脚本的时候,顺便看了 jungleford 的文章从 Jar 中获取资源的方法。很多时候 IDE 替我们做了相关的工作,以至于关键时刻很多人都不知道这类基本操作是怎样的。Jungleford 提供了标准的 Java 实现,那么在 Groovy 下,真正的懒人会怎么做呢?

PS. 这里说的代码树是指……怎么说呢,就是你放代码的那个目录结构。运行 Java 程序的时候当然不会以源代码的形式存在,一般是打到 jar 当中,所以 jungleford 的文章直接写成了从 Jar 中获取

以原文中的 getTextFromJar 来说吧(其实严格的来说和 Jar 没啥关系),用 Groovy 的话,这十几行代码可以写成一句:(path 为所谓的 binary name,如果这个文件在package x.y.z 下的话,path 就是 /x/y/z/filename

   1: ClassLoader.getResource(path)?.text

脚本语言的威力就是如此啊。

一般来说我们用的 *.getClass().getResource 或 **AsStream 其实就是委托给 ClassLoader 来完成的,配合 Groovy 的动态机制,一行代码足矣!

PS II: 严格的来说 Groovy 的“绝对速度”比 Java 要差不少,但是大多数时候程序的速度瓶颈都是在I/O或者Web方面,所以对用户来说“感知速度”不会差。另外原文中的代码使用 String 而非 Buffer/Builder 进行迭代,第一反应是要修改。但是同样考虑到 Jar 中封装的文本通常都非常短,而且只读取一次,所以马马虎虎也算 OK 了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值