尝试使用Java中的相对路径解析文件路径时遇到问题。我不知道我在哪里失败了。你能帮帮我吗?谢谢!
@Test
public void testObjectNotNull() throws Exception{
FileReader fileReader = new FileReader(getClass().getResource("./JavaPractice/resources/tests/codeeval/fileReaderTest.txt").toString());
assertNotNull(fileReader);
}
例外:
java.lang.NullPointerException
at components.com.codeeval.FileReader.FileReaderTest.testObjectNotNull(FileReaderTest.java:13)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
目录结构:
JavaPractice
- resources.tests.codeeval.fileReaderTest.txt(我试图访问的文件)
- tests.components.com.codeeval.FileReader.FileReaderTest.java(尝试访问上述文件的junit)
答案 0 :(得分:0)
你的问题是因为这个
getClass().getResource("./JavaPractice/resources/tests/codeeval/fileReaderTest.txt")
为空。您正在读取类路径而不是相对路径本身
将您的代码更改为
getClass().getResource("tests/codeeval/fileReaderTest.txt")
并确保资源文件夹位于类路径中。另请阅读loading from classpath
答案 1 :(得分:0)
资源不是文件。它们通常是JAR文件条目。您应该使用Class或ClassLoader的资源API。这可以返回一个InputStream。
答案 2 :(得分:-1)
试试这个
InputStream in = Your_Class.class.getClassLoader().getResourceAsStream("resources/tests/codeeval/abc.txt");
assertNotNull(in);
Reader fr = new InputStreamReader(in, "utf-8");