当前位置: 首页 > news >正文

使用String path = FileUtilTest.class.getResource(“/1.txt“).getPath(); 报找不到路径

在windows环境运行,下面的springboot中path怎么找不到文件呢? path输出后的结果是:路径是多少:/D:/bjpowernode/msb/%e4%b9%90%e4%b9%8b%e8%80%85/apache%20commons/SpringBootBase6/target/test-classes/1.txt 怎么解决一下呢? import cn.hutool.core.io.FileUtil; public class FileUtilTest { @Test public void test3() { String path = FileUtilTest.class.getResource("/1.txt").getPath(); System.out.println("路径是多少:"+path); } }

在Windows环境下,当你使用Class.getResource()方法获取资源路径时,可能会遇到路径格式问题,特别是涉及到URL编码(如空格被转换为%20,中文字符被转义等)的情况。从你提供的路径输出结果来看,确实存在这种URL编码的问题。

解决方案
要解决这个问题,你可以采取以下几种方法之一:

方法一:使用Paths.get(URL.toURI())来正确处理路径
Java的Paths类和URI类可以帮助我们正确处理这些转义字符,并生成正确的文件系统路径。以下是修改后的代码示例:

Java
深色版本
import cn.hutool.core.io.FileUtil;
import org.junit.Test;

import java.net.URL;
import java.nio.file.Paths;

public class FileUtilTest {

    @Test
    public void test3() throws Exception {
        URL resourceUrl = FileUtilTest.class.getResource("/1.txt");
        String path = Paths.get(resourceUrl.toURI()).toString();
        System.out.println("路径是多少:" + path);

        // 如果你需要读取文件内容,可以继续使用path变量
        byte[] bytes = FileUtil.readBytes(path);
        System.out.println("bytes.length=" + bytes.length);
    }
}
方法二:直接使用getResourceAsStream()
为了避免路径转换带来的问题,可以直接使用getResourceAsStream()方法来获取输入流,而不是尝试将URL转换为文件路径。这种方法更加通用且不易出错:

Java
深色版本
import cn.hutool.core.io.IoUtil;
import org.junit.Test;

import java.io.InputStream;

public class FileUtilTest {

    @Test
    public void test3() throws Exception {
        InputStream inputStream = FileUtilTest.class.getResourceAsStream("/1.txt");
        if (inputStream == null) {
            System.out.println("资源未找到!");
            return;
        }

        byte[] bytes = IoUtil.readBytes(inputStream);
        System.out.println("bytes.length=" + bytes.length);

        // 确保关闭输入流
        IoUtil.close(inputStream);
    }
}
总结
方法一适用于你需要获得实际的文件系统路径的情况。
方法二更为推荐,尤其是在处理资源文件时,因为它避免了与操作系统相关的路径问题,并且能够很好地处理打包到JAR中的情况。
根据你的具体情况选择合适的方法进行调整即可解决问题。如果1.txt文件是作为测试资源的一部分,请确保它位于src/test/resources/目录下,并且已经被正确地包含在构建路径中。

相关文章:

  • 【Linux系统篇】:什么是信号以及信号是如何产生的---从基础到应用的全面解析
  • echart实现柱状图并实现柱子上方需要显示指定文字,以及悬浮出弹框信息,动态出现滚动条,动态更新x,y轴的坐标名称
  • linux sudo 命令介绍
  • NVIDIA高级辅助驾驶安全报告解析
  • 差分信号抗噪声原理:
  • 浔川代码编辑器v2.0(测试版)更新公告
  • 基于事件驱动的云原生后端架构设计:从理念到落地
  • 【多源01BFS】Codeforce:Three States
  • 基于Vulkan Specialization Constants的材质变体系统
  • JDK(java)安装及配置 --- app笔记
  • 低代码平台开发胎压监测APP
  • redis经典问题
  • 【星海出品】Calico研究汇总
  • hackmyvm-atom
  • 快速体验tftp文件传输(嵌入式设备)
  • 位运算题目:解码异或后的排列
  • PostgreSQL 数据库备份与恢复全面指南20250424
  • Dockerfile指令
  • 知识图谱火了?
  • 【Java面试笔记:进阶】16.synchronized底层如何实现?什么是锁的升级、降级?
  • 韩国检方重启调查金建希操纵股价案
  • 印度加大应对力度,吊销所有巴基斯坦公民签证
  • 金融监管总局:支持将上海打造成具有国际竞争力的再保险中心
  • 长征十梦舟揽月稳步推进
  • 洛阳白马寺内的狄仁杰墓挂上公示牌争论尘埃落定?瀍河区文旅局称已确认
  • 新增1839个!2024年度本科专业备案和审批结果,公布