首页 > 设计 > > 正文

环球热消息:java 处理常量字符串过长 & springboot 项目读取 resouces 文件夹下的文件内容

时间:2023-04-13 22:18:44 来源:博客园


(资料图)

长字符串起因

  • 项目里面有一长串的加密字符串(最长的万多个字符),需要拼接作为参数发送给第三方。
  • 如果我们使用 枚举 定义的话,idea 编译的时候就会出现编译报错
Error: java:常量字符串过长

解决想法

  • 网上还有一个说法,说是编译器问题,修改 idea 工具的编译为 eclipse 即可。

  • 但是结果我仍然不满意,所以我决定把他放在文件中,然后需要的时候读取出来即可。

  • 所以,我就把字符串放到了 resources 的某个 txt 文件下,然后再从文件中读取出来

遇到的问题

  • 在 spring boot 项目中,尝试了好多次读取 resources 下的 payload.txt 文件一直失败。
  • 报错一直是该文件不存在

一开始使用的是 hutool util 工具类去读取,但是不成功。

String filePath = "payload.txt";String contentString = FileUtil.readUtf8String(Thread.currentThread().getContextClassLoader().getResource("").getPath() + filePath);
  • 可以看到我的 target 编译后的文件里面确实是存在这个文件的。

最终解决办法

// 先转为流InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(path);// 再把流转为 StringString content = new BufferedReader(new InputStreamReader(inputStream))                            .lines().collect(Collectors.joining("\n"));
  • 封装代码
public final class ClassPathResourceReader {    /**     * path:文件路径     * @since JDK 1.8     */    private final String path;    /**     * content:文件内容     * @since JDK 1.6     */    private String content;    public ClassPathResourceReader(String path) {        this.path = path;    }    public String getContent() {        if (content == null) {            try {                InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(path);                if (inputStream!=null) {                    content = new BufferedReader(new InputStreamReader(inputStream))                            .lines().collect(Collectors.joining("\n"));                }else {                    throw new RuntimeException("创建 lookLike-app 受众出现异常:File not exist");                }            } catch (Exception e) {                throw new RuntimeException(e);            }        }        return content;    }}

这样相当于做了个本地缓存,就不用每次都去读取文件了,性能嘎嘎快。

  • 代码调用
String content = new ClassPathResourceReader("payload.txt").getContent();
关键词:
x 广告
5月11日15时至12日15时,北京新增本土新冠肺炎病毒感染者36例

  中新网北京5月12日电(记者 杜燕)北京市疾病预防控制中心副主任、全国新型冠状病毒肺炎专家组成员庞星火在12日召开的北京市新冠肺炎疫

通讯:范长江侄女范家敏:“伯伯为全家带来新闻力量”

  中新网巴彦淖尔5月12日电 题:范长江侄女范家敏:“伯伯为全家带来新闻力量”  中新网记者 李爱平  50岁的范家敏人生中的“骄傲

四川广安新增无症状感染者25例 2000余名医务人员支援邻水

  (抗击新冠肺炎)四川广安新增无症状感染者25例 2000余名医务人员支援邻水  中新网成都5月12日电(王爵 王林)12日上午,四川广安市召

国际护士节拳拳之心战疫情:小桌子,大责任

  中新网西宁5月12日电 题:国际护士节拳拳之心战疫情:小桌子,大责任  中新网记者 张添福  5月8日,是母亲节。在青海,恰是很多

京杭大运河全线通水 入河北省南运河水量近1.5亿立方米

  中新社石家庄5月12日电 (李晓伟 任树春 吕培)据河北省水利厅12日消息,4月28日,京杭大运河实现近一个世纪以来首次全线通水,截至5

广东暴雨天气将持续 需继续做好防御

  中新网广州5月12日电 (记者 王坚)广东省气象局12日发布消息称,10日到12日早晨,该省大部分市县先后出现了暴雨到大暴雨局地特大暴雨

x 广告

Copyright   2015-2022 北方评测网版权所有   备案号:京ICP备2021034106号-50   联系邮箱: 55 16 53 8@qq.com