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

这篇具有很好参考价值的文章主要介绍了java 处理常量字符串过长 & springboot 项目读取 resouces 文件夹下的文件内容。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

长字符串起因

  • 项目里面有一长串的加密字符串(最长的万多个字符),需要拼接作为参数发送给第三方。

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

  • 如果我们使用 枚举 定义的话,idea 编译的时候就会出现编译报错
Error: java:常量字符串过长

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


解决想法

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

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

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

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


遇到的问题

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

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

String filePath = "payload.txt";
String contentString = FileUtil.readUtf8String(Thread.currentThread().getContextClassLoader().getResource("").getPath() + filePath);
  • 可以看到我的 target 编译后的文件里面确实是存在这个文件的。
    java 处理常量字符串过长 & springboot 项目读取 resouces 文件夹下的文件内容

最终解决办法

// 先转为流
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;
    }
}

这样相当于做了个本地缓存,就不用每次都去读取文件了,性能嘎嘎快。文章来源地址https://www.toymoban.com/news/detail-412564.html

  • 代码调用
 String content = new ClassPathResourceReader("payload.txt").getContent();

到了这里,关于java 处理常量字符串过长 & springboot 项目读取 resouces 文件夹下的文件内容的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言常量(整型、实型、字符型、字符串、符号常量)

    对于C语言常量,该文章有详讲,由于文章太长,可参考如下思维导图和目录,可通过目录选择自己所需要的内容阅读。 整型常量即整数,包括正整数、负整数和零。C语言中,整型常量可以用十进制、八进制、和十六进制表示。 十进制表示: 由数字0-9,正、负号组成,如3

    2024年02月07日
    浏览(31)
  • 解决因base64字符串过长,报500的问题

    提示:后端用nodejs的express,前端是vue 当上传的图片小(base64字符串长度小)时,上传成功 当上传的图片大(base64字符串长度过长)时,上传失败,接口报500,服务器也报了一大堆的错误。 如果直接把base64字符串复制到数据库发现报错,提示数据太长,很明显是因为base64字符

    2024年02月11日
    浏览(36)
  • .NET字符串内存管理:常量字符串、动态创建和字符串池的巧妙结合

      在 .NET 中,字符串是不可变的,这意味着一旦创建,字符串的内容就不能被修改。字符串在内存中以不同的方式存储,具体取决于它是常量字符串还是动态创建的字符串。 常量字符串在编译时就被解析,并在程序的元数据(Metadata)中存储。多个相同的字符串常量可能会共

    2024年01月20日
    浏览(37)
  • C语言入门之变量、常量、字符串、转义字符

    文章目录 变量 常量 字符串 转义字符 1.变量的命名规则: 只能由字母(包括大写和小写)、数字和下划线( _ )组成。 不能以数字开头。 长度不能超过63个字符。 变量名中区分大小写的。 变量名不能使用。 2.变量的分类:         变量可以分为局部变量以及全局

    2023年04月19日
    浏览(45)
  • C语言字符串初始化详解:用常量字符串进行字符数组初始化

    简介 字符串初始化 用常量字符串 初始化过程 示范代码 结论 在C语言中,字符串被定义为字符数组。字符串的初始化是指将一个常量字符串复制到字符数组中。本文将详细介绍字符串的初始化方法,并提供相应的示范代码。 在C语言中,有几种常用的方法可以用常量字符串来

    2024年02月15日
    浏览(35)
  • C语言——字符串常量初始化

            使用双引号括住字符串的字符来创建字符串常量。         使用字符数组来存储字符串常量。         使用字符串指针来初始化字符数组。         无论使用哪种方法,字符串常量在C语言中都是不可修改的。尝试修改字符串常量会导致未定义的行为。

    2024年01月23日
    浏览(38)
  • 【Go基础】编译、变量、常量、基本数据类型、字符串

    面试题文档下链接点击这里免积分下载 go语言入门到精通点击这里免积分下载 使用 go build 1.在项目目录下执行 2.在其他路径下编译 go build ,需要再后面加上项目的路径(项目路径从GOPATH/src后开始写起,编译之后的可执行文件就保存再当前目录) 3.打包的时候自定义名字:

    2024年02月09日
    浏览(46)
  • JVM的内存分配及各种常量池的区别(静态常量池、运行时常量池、字符串常量池)

    先了解下JVM中的内存分配,此处以hotspot vm为例(官方jdk采用的vm) 堆内存是各个线程共享的区域 它用于存储已经被虚拟机加载的类信息、常量、静态变量、即编译器编译后的代码等数据。静态变量、常量在方法区,所有方法,包括静态和非静态的,也在方法区 这里解释一下方法

    2023年04月14日
    浏览(42)
  • JVM运行时数据区——字符串常量池位置的调整

            在JDK6及之前,使用永久代来实现方法区,字符串常量池(StringTable)是在 永久代(方法区)中 的,但是方法区的回收效率不高,在Full GC时才会回收。           在JDK7中,将字符串常量池 转移到了堆中 ,分配在年轻代和老年代中。         在JDK8中,为了 融合

    2024年02月16日
    浏览(22)
  • 【数据结构】String类对象的创建与字符串常量池的“神秘交易”

    作者主页: paper jie_博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《JAVA数据结构》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造,将javaSE基础知识一网打尽,希望可以帮到读者们哦。 其他专栏:

    2024年02月08日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包