【已解决】Spring boot项目获取到resource目录下文件完整路径怎么获取 ?

news2024/9/24 1:24:38

在实际开发过程中,可能有时候,我们将文件放在resource下,在程序中需要获取到文件路径然后操作。比如,将公钥放到resource文件夹下,在程序中需要获取到这个公钥的完整路径。怎么操作?

 

需要访问的文件位置

获取方法如下:

在yaml文件中配置公钥文件名称:

pem:
  public-key: publickey.pem

代码中获取公钥的绝对路径:

package com.kaigejava.config.pem;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.ClassPathResource;

import java.io.IOException;
import java.net.URL;


/**
 * @author kaigejava
 * @since 2023/6/27 9:48
 */
@Slf4j
@Data
public class PemBean {

    /**
     * 公钥名称
     */
    private static String pubKey = "publickey.pem";
    /**
     * 公钥地址
     */
    private static String pubKeyFilePath = "files/pem/";
    /**
     * zip文件地址
     */
    private static String zipDataBasePath = "files/zip/";

  

    public static String getPublicKey() {
        try {
            return function1(pubKey);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return pubKey;
    }


    private static String getPrePath(String fileName, String path) throws IOException {
        ClassPathResource classPathResource = new ClassPathResource(fileName);
        URL fileUrl = classPathResource.getURL();
        // 获取文件的绝对路径
        String absolutePath = fileUrl.getPath();
        //本地运行的
        int index = -1;
//注意:这里修改成你自己的路径
String s = "kaigejava/bin";
        String os = System.getProperty("os.name");
        if (absolutePath.contains("target")) {
            index = absolutePath.indexOf("target");
            absolutePath = absolutePath.substring(1, index);
        } //非本地的。根据操作系统判断.
        
        if (os != null && os.toLowerCase().startsWith("windows")) {
            log.info("windows");
            if (absolutePath.startsWith("file:")) {
                if (absolutePath.contains(s)) {
                    index = absolutePath.indexOf(s);
                }
                absolutePath = absolutePath.substring("file:".length() + 1, index + s.length());
            }
        } else if (os != null && os.toLowerCase().startsWith("linux") || isMacOSX(os)) {
            log.info("linux");
//注意:这里修改成你自己的路径
            if (absolutePath.contains("kaigejava-docs")) {
                s = "usb-drive";
            }
            if (absolutePath.startsWith("file:")) {
                if (absolutePath.contains(s)) {
                    index = absolutePath.indexOf(s);
                }
                absolutePath = absolutePath.substring("file:".length(), index + s.length());
            }
        }
        absolutePath = absolutePath + path;
        return absolutePath;
    }


    public static boolean isMacOSX(String os) {
        return os.indexOf("mac") >= 0 && os.indexOf("os") > 0 && os.indexOf("x") > 0;
    }

    public static String function1(String fileName) throws IOException {
        String prePath = getPrePath(fileName, pubKeyFilePath);
        prePath = prePath + fileName;
        return prePath;
    }

    public static String getZipDataBasePath() {
        try {
            return getPrePath(pubKey, zipDataBasePath);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return zipDataBasePath;
    }


   

}

测试方法:

package com.kaigejava;

import com.kaigejava.config.pem.PemBean;
import xxx.sm2.SM2;
import org.bouncycastle.math.ec.ECPoint;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.UnsupportedEncodingException;
import java.util.Base64;

@SpringBootTest
class UsbDriveApplicationTests {


    @Test
    public void getPKey() throws UnsupportedEncodingException {
        SM2 sm = new SM2();
        String path = "";
        path = PemBean.getPublicKey();
        System.out.println("公钥地址:" + path);
        ECPoint publicKey = sm.importPublicKey(path);
        byte[] data = sm.encrypt("haha", publicKey, "UTF-8");
        Base64.Encoder encoder = Base64.getEncoder();
        System.out.println("加密后:" + encoder.encodeToString(data));
    }

    @Test
    public void getZipPath() throws UnsupportedEncodingException {
        String path = PemBean.getZipDataBasePath();
        System.out.println("ZIP地址:" + path);
    }
}

运行后获取到的公钥路径:

运行后结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/710675.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库课程设计(教室设备故障报修系统)

题目:教室设备故障报修系统 内容与要求: 完成需求分析,写出功能需求和数据需求描述;在需求分析的基础上,完成数据库概念结构设计、逻辑结构设计、物理结构设计和数据库创建;完成视图、存储过程设计&#xf…

使用阿里云实现短信验证码

首先去阿里云中开启短信服务 然后申请自己的签名,发送的短信模板,之后点击右上角的头像,点击AccessKey,选第一个就行,然后保存这两个对应的值。 在等待签名和发送模板通过审核之后就可以配置我们的发送方法&#xff0c…

Android Framework的重要性及其对行业前景的影响~

随着智能手机和移动应用的兴起,Android操作系统成为全球最大的移动操作系统,而Android Framework作为其核心组件之一,扮演着至关重要的角色。Android Framework提供了众多的API和工具,为开发者提供了构建功能丰富、高效稳定的Andr…

大厂月入3w+,失业焦虑折磨着我

大家好,这里是程序员晚枫,小红书也叫这个名字。 周末和一位老朋友聚会,聊了聊一个很现实的收入问题,巧合的是:他的焦虑,竟然和月薪5k的我一模一样。 今天给大家分享一下。 1、外人看来,让人羡…

Scrpay框架之MongoDB--Index

目录 MongoDB-Index 概念 索引类型 创建索引 注意 样例 索引的查看 删除索引 语法 样例 检测索引的速度优势 Mongo-Unique Index And Compound Index 唯一索引(Unique Index) 添加唯一索引的语法 利用唯一索引进行数据去重 复合索引&a…

zkSync的ZK Stack:Hyperchains和Hyperbridges

1. 引言 ZK Stack有2个关键特性: sovereignty 主权:作为创建者,可对自己的链有完全的自由和权利来定制链的每一个方面。 Hyperchains独立运行,依赖以太坊L1来提供安全性和活性。 seamless connectivity 无缝连接。 Hyperbridges…

SolidWorks全球认证报名简章

SolidWorks CSWP专业认证考试 一、CSWP的起源 CSWP全名为Certified SolidWorks Professional ,为SolidWorks原厂认证;在全球非常具有公信力。是健全与完整的3D CAD认证,相较于一般宣称是3D CAD认证,但是却没有投入完整的团队与完…

Barplot | 平平无奇的环形Barplot你掌握了吗!?~(附完整代码)

1写在前面 最近天天下雨,真是下得我没脾气啊,动不动就淋成狗。😭 下雨也就算了,还特别热。🤒 不知道是不是人到中年了,事情也特别的多,能静下心来思考的时间越来越少了。😞 也越来越…

SparkSQL与Hive整合(Spark On Hive)

1. Hive的元数据服务 hive metastore元数据服务用来存储元数据,所谓元数据,即hive中库、表、字段、字段所属表、表所属库、表的数据所在目录及数据分区信息。元数据默认存储在hive自带的Derby数据库。在内嵌模式和本地模式下,metastore嵌入在…

安装一个新虚拟环境——就叫它newtorch吧!

文章目录 1 新建一个虚拟环境newtorch2 安装pytorch1.7.1依赖包3 安装matplotlib2.2.34 安装torchsummary5 现在开始测试一下代码6 安装pandas 1 新建一个虚拟环境newtorch 打开anaconda prompt,输入: conda create -n newtorch python3.7.4// newtorc…

idea多模块测试——暂时不启动某个有问题的模块,之后再加载回来

文章目录 遇到问题解决方案暂时卸载然后还原 遇到问题 某个模块出了问题,运行不了项目 解决方案 暂时卸载 然后还原

云原生之深入解析Dapr安全性之访问控制策略

一、服务调用范围访问策略 ① 跨命名空间的服务调用 Dapr 通过服务调用 API 提供端到端的安全性,能够使用 Dapr 对应用程序进行身份验证并设置端点访问策略: Dapr 应用程序可以被限定在特定的命名空间,以实现部署和安全,当然仍然…

计算机基础知识学习笔记

目录 1.计算机奠基人—冯•诺依曼1.冯诺依曼结构2.冯诺依曼结构的特点 2.计算机的发展 感觉自己的计算机基础知识还很薄弱,工作之余补习一下。1.计算机奠基人—冯•诺依曼 1.冯诺依曼结构 冯诺依曼结构也称作普林斯顿结构,是一种将程序(指令…

【C语言】大小端介绍以及判断大小端的两种方式

前言 🎈大家好,我是何小侠🎈 🍃大家可以叫我小何或者小侠🍃 💐希望能通过写博客加深自己对于学习内容的理解💐 🌸也能帮助更多人理解和学习🌸 花繁柳密处,拨…

【探索 Kubernetes|作业管理篇 系列 16】离线业务 Job、CronJob

前言 大家好,我是秋意零。 在上一篇中,我们讲解了 DaemonSet 控制器,相信你以及理解了其的工作过程,分为三部。一是,获取所有 Node 节点中的 Pod;二是,判断是否有符合 DaemonSet 管理的 Pod&a…

osg实现镜面成像、倒影效果

目录 1. 需求提出 2. 代码实现 3. 功能讲解 3.1. 设置地面半透明 3.2. 设置镜面倒影成像 3.3. 设置地面颜色 3.4. 设置相机初始位置 4. 总结 1. 需求提出 平时的业务需求,有时需要实现镜面成像、倒影效果,如下&#xff1a…

79、基于STM32单片机DHT11温湿度无线蓝牙手机APP监控报警系统(程序+原理图+PCB图+设计资料+参考论文+开题报告+元器件清单等)

摘 要 温湿度控制已成为当今社会研究的热门项目。是工农业生产过程中必须考虑的因素。作为最常见的被控参数。温度和湿度已经不再是相互独立的物理量,而应在系统中综合考虑。广泛应用于实验室、大棚、花圃、粮仓乃至土壤等各个领域。而传统的温湿度控制则利用湿度…

Qt QLineEdit篇

QLineEdit篇 【1】QLineEdit简介【2】QLineEdit常用方法【3】QLineEdit使用举例UI设计界面效果头文件源文件 PC饱和了,跟我学Qt比较实在,哈哈哈 【1】QLineEdit简介 QLineEdit是Qt框架中的一个类,用于创建一个文本输入框,允许用…

【WSN定位】基于蜣螂优化算法DBO的Dvhop定位算法 不同锚节点比例和不同通信半径情况下对比【Matlab代码#45】

文章目录 【可更换其他算法,获取资源请见文章第5节:资源获取】1. Dvhop定位算法2. 蜣螂优化算法3. 部分代码展示4. 仿真结果展示5. 资源获取 【可更换其他算法,获取资源请见文章第5节:资源获取】 1. Dvhop定位算法 根据距离矢量和…

#systemverilog# 关于随机约束之 约束块

随机变量的值通过由约束块声明的约束表达式来确定。像任务、函数和变量一样,随机块是类的成员。在一个类中,约束块的名字必须是唯一的。 一 语法定义 声明约束块的语法如下: (1)constraint_identifier是约束块的名字。使用constraint_mode()(参见12.8节)方法,这个名字…