Java 读取目标/测试类FileNotFound上的文件

Java 读取目标/测试类FileNotFound上的文件,java,Java,我正在单元测试中从我的资源文件夹中读取一个文件 我可以在目标/测试类中看到该文件 但是,当我试图将文件包装到fileInputStream中时,该文件会抛出异常,因为找不到该文件 ClassLoader classLoader = getClass().getClassLoader(); File file = new File(classLoader.getResource("CV.pdf").getFile()); FileInputStream fis = new FileInputStr

我正在单元测试中从我的资源文件夹中读取一个文件

我可以在目标/测试类中看到该文件

但是,当我试图将文件包装到fileInputStream中时,该文件会抛出异常,因为找不到该文件

ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("CV.pdf").getFile());
FileInputStream fis = new FileInputStream(file)
输出调试:

classLoader.getResource(“CV.pdf”):

也许是因为我的文件夹有空白名称

文件肯定在那里,我可以在那个文件夹里看到它

我做错了什么

问候。

你真的需要吗

实际文件甚至可以在jar中(如果您指示maven制作测试jar)

更灵活的方法是使用:

你真的需要吗

实际文件甚至可以在jar中(如果您指示maven制作测试jar)

更灵活的方法是使用:


那么
getResource(…)
返回的URL中的值是多少?
getFile
调用返回什么值?在
文件
中结束的文件路径是什么?我用输出更新我的问题路径是URL编码的,您需要解码它,不要解码该URL。这是正确的方式,它是!问题是URL.getFile()方法不会将URL转换为文件名,它只返回URL的路径部分。您根本不应该尝试将URL转换为文件,因为如果这样做,您将无法从.jar运行。那么
getResource(…)
返回的URL中的值是多少?
getFile
调用返回什么值?在
文件
中结束的文件路径是什么?我用输出更新我的问题路径是URL编码的,您需要解码它,不要解码该URL。这是正确的方式,它是!问题是URL.getFile()方法不会将URL转换为文件名,它只返回URL的路径部分。您根本不应该尝试将URL转换为文件,因为如果这样做,您将无法从.jar运行。您也可以只执行
getClass().getResourceAsStream(“CV.pdf”)
。您也可以只执行
getClass().getResourceAsStream(“CV.pdf”)
file:/Users/Development/File%20-%20Test%20Java%20trial/Code/target/test-classes/CV.pdf
try(final InputStream is = getClass().getResource("CV.pdf").openStream()) 
{
    //Do something with is
}