java 处理常量字符串过长 & springboot 项目读取 resouces 文件夹下的文件内容
长字符串起因
- 项目里面有一长串的加密字符串(最长的万多个字符),需要拼接作为参数发送给第三方。
- 如果我们使用 枚举 定义的话,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);
// 再把流转为 String
String 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();
java 处理常量字符串过长 & springboot 项目读取 resouces 文件夹下的文件内容的更多相关文章
- java读取文件夹下所有文件并替换文件每一行中指定的字符串
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.I ...
- java笔试题: ——将e:/source文件夹下的文件打个zip包后拷贝到f:/文件夹下面
将e:/source文件夹下的文件打个zip包后拷贝到f:/文件夹下面 import java.io.*; import java.util.zip.ZipEntry; import java.uti ...
- java中File类应用:遍历文件夹下所有文件
练习: 要求指定文件夹下的所有文件,包括子文件夹下的文件 代码: package 遍历文件夹所有文件; import java.io.File; public class Test { public ...
- java删除文件夹下所有文件
package org.sw; import java.io.File; /** * * @author mengzw * @since 3.0 2014-2-26 */ public class D ...
- java遍历ftp文件夹下所有文件(或指定文件下的文件)
import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import org.apach ...
- 在文件夹下所有文件中查找字符串(linux/windows)
在linux下可以用 grep "String" filename.txt#字符串 文件名grep -r "String" /home/#递归查找目录下所有文件 ...
- java监控文件夹下的文件变化使用jnotify
https://blog.csdn.net/codepython/article/details/42341243?utm_source=blogxgwz1 使用jnotify https://blo ...
- Java 合并多个文件内容到一个文件(递归遍历某个文件夹下所有文件)
这段代码通过Java I/O流API实现将多个文件合并到一个文件中,输出为文本文件,提供一个支持语法高亮的网站,http://www.codeinword.com/ 适合粘贴代码到word文档,小巧实 ...
- Java中通过递归调用删除文件夹下所有文件
摘自 : http://blog.sina.com.cn/s/blog_79333b2c0100xiu4.html import java.io.File; public class FileTest ...
- Java web 项目读取src或者tomcat下class文件夹下的xml文件或者properties文件
//生成一个文件对象: File file = new File(getClass().getClassLoader().getResource("test.xml").getPa ...
随机推荐
- Lite-Mono(CVPR2023)论文解读
Lite-Mono: A Lightweight CNN and Transformer Architecture for Self-Supervised Monocular Depth Estima ...
- 快速了解DevSecOps:构建安全软件开发的基石!
关键词 DevSecOps - 在不影响敏捷性的前提下,将安全充分融入到SDLC的所有环节中 SDLC-软件交付生命周期 SCA-软件组成分析-用于识别和检测软件中使用的开源/第三方组件的已知安全漏洞 ...
- Unity UGUI的Image(图片)组件的介绍及使用
UGUI的Image(图片)组件的介绍及使用 1. 什么是UGUI的Image(图片)组件? UGUI的Image(图片)组件是Unity引擎中的一种UI组件,用于显示2D图像.它提供了一种简单而灵活 ...
- 52条SQL语句,性能优化!
52条SQL语句,性能优化! SQL语句性能优化 1, 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2,应尽量避免在 where 子句中对 ...
- MIT 6.828 Lab实验记录 —— lab1 Booting PC
实验参考信息 MIT 6.828 lab1 讲义地址 MIT 6.828 课程 Schedule MIT 6.828 lab 环境搭建参考 MIT 6.828 lab 工具guide Brennan' ...
- Vue用v-bind给标签属性赋值 src, href...
给属性渲染数据不能使用 {{name}} 标记, 请使用 v-bind:属性名称="name" name是json数据键值对中的键名, 请配合下面JS代码片食用 HTML < ...
- 小白快速入门SRC挖掘(以edusrc为例)
edusrc平台介绍 我们可以在关于页面看到edusrc的收录规则: 现阶段,教育行业漏洞报告平台接收如下类别单位漏洞: 教育部 各省.自治区教育厅.直辖市教委.各级教育局 学校 教育相关软件 可以看 ...
- 3天上手Ascend C编程丨通过Ascend C编程范式实现一个算子实例
本文分享自华为云社区<3天上手Ascend C编程 | Day2 通过Ascend C编程范式实现一个算子实例>,作者:昇腾CANN . 一.Ascend C编程范式 Ascend C编程 ...
- 提高 MySQL查询效率的方法
当涉及到提高MySQL查询效率时,以下是一些重要的策略和技巧,可以帮助你优化数据库性能.无论你是一个Web开发者.数据工程师还是系统管理员,这些方法都可以帮助你确保你的MySQL数据库运行得更快.更有 ...
- spark修改控制台输出日志级别
spark修改控制台输出日志级别 修改conf/log4j.properties cd $SPARK_HOME/conf cp log4j.properties.template ./log4j.pr ...