classLoader、resource资源加载、类路径
文章目录类加载器获取资源(最基础)Resource获取资源ClassPathResource实现类ResourceLoader获取资源PathMatchingResourcePatternResolver实现类ResourceLoader注入式写法new File()时的错误场景Resource读取文本拿到了Resource也就拿到了inputstream资源加载看似简单实际有些坑需要整理下。资源加载不只一种方式。看情况用哪一种即可。类加载器获取资源(最基础)不加左斜杠表示从根路径加载推荐InputStreamisthis.getClass().getClassLoader().getResourceAsStream(config.properties);加了左斜杠表示从当前类路径加载那么文件要这个类同一目录不推荐InputStreamis2this.getClass().getResourceAsStream(/config.properties);Resource获取资源Resource是一个接口最常用的实现类就是ClassPathResource。ClassPathResource实现类ClassPathResource的定义很明确获取类路径文件。ResourceresourcenewClassPathResource(config.properties);ResourceLoader获取资源ResourceLoader也是一个接口最常用的实现类是PathMatchingResourcePatternResolver。ResourceLoader最大的好处1、支持批量单个用getResource()批量用getResources()。2、切换资源来源(类路径、文件系统、网络资源)classpath:# 类路径file:# 文件系统PathMatchingResourcePatternResolver实现类PathMatchingResourcePatternResolverresolvernewPathMatchingResourcePatternResolver();支持批量Resourceresourceresolver.getResource(classpath:config.properties);// 单个Resource[]resourcesresolver.getResources(classpath:config/*.properties);// 批量灵活切换资源来源ResourceclassResresolver.getResource(classpath:config.properties);// 类路径ResourcefileResresolver.getResource(file:/data/config.properties);// 文件路径ResourceLoader注入式写法spring框架中可以直接注入使用因为默认的实现就是PathMatchingResourcePatternResolver。AutowiredprivateResourceLoaderresourceLoader;publicvoidloadConfig(){ResourceresourceresourceLoader.getResource(classpath:config.properties);}new File()时的错误场景这种写法绝对禁止尤其是在获取resources下文件时。newFile(src/main/resources/config.properties);原因src/main/resources这个路径打包后会消失src/main/java路径也会消失。你看打包后的jarBOOT-INF/classes下就是com# com文件夹在idea编辑器中是src/main/java/comappliation.yaml# 配置文件在idea编辑器中是src/main/resources/application.yamlResource读取文本publicStringimportNovelsToEs(){log.info(开始导入所有金庸小说到ES并进行文本划块);inttotalChunks0;try{// 1. 获取 resources/novels/ 目录下的所有文件PathMatchingResourcePatternResolverresolvernewPathMatchingResourcePatternResolver(resourceLoader);// 4. 使用 resolver 的 getResources 方法注意使用 classpath*: 确保扫描所有资源Resource[]resourcesresolver.getResources(classpath*:/novels/*.txt);for(Resourceresource:resources){StringfileNameresource.getFilename();if(fileNamenull)continue;StringbookNamefileName.replace(.txt,);log.info(正在处理小说{} ,bookName);// 2. 读取文件内容StringcontentreadFileContent(resource);if(contentnull||content.isEmpty()){log.warn(小说《{}》内容为空跳过,bookName);continue;}// 3. 执行文本划块并保存intchunksprocessAndSaveChunks(bookName,content);totalChunkschunks;log.info(小说《{}》处理完毕生成 {} 个文本块,bookName,chunks);}}catch(IOExceptione){log.error(扫描小说文件目录时发生异常,e);return导入失败: e.getMessage();}StringresultString.format(所有小说导入完成共导入 %d 个文本块,totalChunks);log.info(result);returnresult;}拿到了Resource也就拿到了inputstream一步式写法InputStreamisthis.getClass().getClassLoader().getResourceAsStream(config.properties);分开写this.getClass().getClassLoader().getResource(config.properties).openStream();或者URLresourcethis.getClass().getClassLoader().getResource(config.properties);InputStreaminputStreamresource.openStream();

相关新闻

3步获取阿里云盘Refresh Token:终极自动化管理指南

3步获取阿里云盘Refresh Token:终极自动化管理指南

3步获取阿里云盘Refresh Token:终极自动化管理指南 【免费下载链接】aliyundriver-refresh-token QR Code扫码获取阿里云盘refresh token For Web 项目地址: https://gitcode.com/gh_mirrors/al/aliyundriver-refresh-token 您是否厌倦了手动备份文件到阿里云…

2026/6/17 10:45:21阅读更多 →
使用Nuclei自动化检测Confluence高危漏洞CVE-2023-22527实战指南

使用Nuclei自动化检测Confluence高危漏洞CVE-2023-22527实战指南

1. 项目概述:为什么选择Nuclei来应对Confluence高危漏洞 如果你负责过企业资产的安全巡检,或者自己搭建过Confluence用于团队协作,那么对CVE-2023-22527这个编号一定不会陌生。去年年底,这个被标记为“严重”级别的漏洞在安全圈和…

2026/6/17 10:40:20阅读更多 →
免费去水印软件哪个好用?2026手机电脑无广告工具推荐,在线去水印网站安全吗

免费去水印软件哪个好用?2026手机电脑无广告工具推荐,在线去水印网站安全吗

日常刷短视频、保存高清图片时,自带的平台水印总会影响观感,不少小伙伴都在寻找靠谱的免费去水印工具。2026年市面上去水印工具五花八门,有手机APP、电脑客户端、在线网页工具,还有免下载的微信小程序,很多人纠结&…

2026/6/17 10:40:20阅读更多 →
Obsidian Border主题:3步打造你的专属知识管理空间,效率提升40%

Obsidian Border主题:3步打造你的专属知识管理空间,效率提升40%

Obsidian Border主题:3步打造你的专属知识管理空间,效率提升40% 【免费下载链接】obsidian-border A theme for obsidian.md 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-border 你是否曾经因为Obsidian的界面过于单调而无法专注&…

2026/6/17 16:19:18阅读更多 →
OptiScaler技术架构深度解析:跨GPU超分辨率与帧生成桥接实现机制

OptiScaler技术架构深度解析:跨GPU超分辨率与帧生成桥接实现机制

OptiScaler技术架构深度解析:跨GPU超分辨率与帧生成桥接实现机制 【免费下载链接】OptiScaler OptiScaler bridges upscaling/frame gen across GPUs. Supports DLSS2/XeSS/FSR2 inputs, replaces native upscalers, enables FSR-FG/XeFG on non-FG titles. Support…

2026/6/17 16:19:18阅读更多 →
如何5分钟快速搭建TFTP服务器:Tftpd64完整配置指南

如何5分钟快速搭建TFTP服务器:Tftpd64完整配置指南

如何5分钟快速搭建TFTP服务器:Tftpd64完整配置指南 【免费下载链接】tftpd64 The working repository of the famous TFTP server. 项目地址: https://gitcode.com/gh_mirrors/tf/tftpd64 Tftpd64是一款免费开源的轻量级TFTP服务器套件,集成了TFT…

2026/6/17 16:19:18阅读更多 →
5步掌握Godot物理关节:从基础约束到复杂机械结构设计

5步掌握Godot物理关节:从基础约束到复杂机械结构设计

5步掌握Godot物理关节:从基础约束到复杂机械结构设计 【免费下载链接】godot Godot Engine – Multi-platform 2D and 3D game engine 项目地址: https://gitcode.com/GitHub_Trending/go/godot 想要在Godot中创建逼真的机械装置却总被卡顿和穿模困扰&#x…

2026/6/17 16:19:18阅读更多 →
RPCS3模拟器完整指南:在PC上畅玩PS3游戏的实用教程

RPCS3模拟器完整指南:在PC上畅玩PS3游戏的实用教程

RPCS3模拟器完整指南:在PC上畅玩PS3游戏的实用教程 【免费下载链接】rpcs3 PlayStation 3 emulator and debugger 项目地址: https://gitcode.com/GitHub_Trending/rp/rpcs3 RPCS3是全球首个免费开源的PlayStation 3模拟器和调试器,让你能够在Win…

2026/6/17 16:19:18阅读更多 →
海泰克触摸屏软件ADP V6.8.0:组态、通信与维护实战指南

海泰克触摸屏软件ADP V6.8.0:组态、通信与维护实战指南

1. 项目概述:海泰克触摸屏软件的核心价值 在工业自动化现场,触摸屏作为人机交互的核心枢纽,其重要性不言而喻。它不仅是操作员下达指令的窗口,更是设备状态、生产数据、报警信息的集中展示平台。提到触摸屏品牌,大家可…

2026/6/17 16:14:15阅读更多 →
飞书机器人接入 OpenClaw 完整落地部署指南(含安装包)

飞书机器人接入 OpenClaw 完整落地部署指南(含安装包)

OpenClaw 2.7.9 对接飞书机器人完整配置教程 本文讲解借助长连接模式打通 OpenClaw 与飞书的操作流程,配置完成后,可在飞书私聊、群组内发送指令,调用本地 AI 实现电脑自动化操作。整体流程分为飞书平台创建应用、权限配置、密钥填写三大环节…

2026/6/17 10:40:20阅读更多 →
嵌入式处理器技术演进与飞思卡尔实战解析:从架构选型到系统设计

嵌入式处理器技术演进与飞思卡尔实战解析:从架构选型到系统设计

1. 嵌入式处理器:从“大脑”到“神经系统”的进化 在电子设备无处不在的今天,我们很少会去思考一个智能设备是如何“思考”和“行动”的。无论是汽车引擎的精准控制、工厂机械臂的流畅运转,还是智能家居的自动响应,其背后都离不开…

2026/6/17 10:40:20阅读更多 →
如何高效使用BallonTranslator:3分钟完成漫画翻译的完整实用指南

如何高效使用BallonTranslator:3分钟完成漫画翻译的完整实用指南

如何高效使用BallonTranslator:3分钟完成漫画翻译的完整实用指南 【免费下载链接】BallonsTranslator 深度学习辅助漫画翻译工具, 支持一键机翻和简单的图像/文本编辑 | Yet another computer-aided comic/manga translation tool powered by deeplearning 项目地…

2026/6/17 10:40:20阅读更多 →