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

使用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/目录下,并且已经被正确地包含在构建路径中。

http://www.xdnf.cn/news/1794.html

相关文章:

  • Spring Boot 中配置线程池时优化 `ThreadPoolTaskExecutor` 的配置总结
  • DDL小练习
  • Java小公司实习面经
  • python字符串(3):字符集/编码(查看修改字符集,乱码);码点和字符的转换(chr和ord),字符串的编码解码函数(encode,decode)
  • Dockerfile指令
  • JavaScript 实现继承及 Class 本质详解
  • 【Python Web开发】02-Socket网络编程02
  • Java 高频面试题解析
  • Langchain提取结构化数据
  • 第九节:性能优化高频题-首屏加载优化策略
  • JS Array 方法 | 区分 slice 和 splice
  • `rfind()` 从字符串的右侧开始查找指定子字符串首次出现的位置
  • SiamFC算法深度解析
  • 深入浅出:Pinctrl与GPIO子系统详解
  • SpringCloud微服务架构设计与实践 - 面试实战
  • C语言别踩白块附源码
  • Trae+DeepSeek学习Python开发MVC框架程序笔记(四):使用sqlite存储查询并验证用户名和密码
  • 现代化个人博客系统 ModStartBlog v10.3.0 博客批量操作,博客评论智能审核,安全升级
  • 某大型电解铝厂电解系统谐波治理装置改造沃伦森电气
  • Linux之七大难命令(The Seven Difficult Commands of Linux)
  • U盘能识别但无法写入数据的原因
  • CSS学习笔记8——表格
  • STM32F103C8T6 GPIO 通讯原理与物理层解析
  • Git 详细使用说明文档(适合小白)
  • 数据结构-冒泡排序(Python)
  • 【硬核干货】JetBrains AI Assistant 干货笔记
  • 数据分析工具 - AxureMost
  • php 框架Workerman定时任务详解《一》
  • MCP开发实战(一)基于MCP协议的大模型网关——多个大模型API统一封装为标准化工具
  • Axure大屏可视化模板:多领域数据决策的新引擎