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