【问题标题】:Java Relative Path IssueJava 相对路径问题
【发布时间】:2014-04-26 01:59:16
【问题描述】:

我在尝试使用 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)

目录结构:

Java实践

--resources.tests.codeeval.fileReaderTest.txt(我试图访问的文件)

--tests.components.com.codeeval.FileReader.FileReaderTest.java(试图访问上述文件的junit)

【问题讨论】:

标签: java relative-path


【解决方案1】:

资源不是文件。它们通常是 JAR 文件条目。您应该使用 Class 或 ClassLoader 的资源 API。这可以返回一个 InputStream。

【讨论】:

  • 您好 EJP,感谢您提及这一点!放置 .txt 和 .xmls 等文件的最佳做法是什么?我应该直接将它们添加到与 java 源文件相同的包中吗?
  • 我解决这个问题的方法: 1. Intellij 上未标记的资源文件夹作为资源根目录 2. 更改的代码: FileReader fileReader = new FileReader("resources\\tests\\codeeval\\fileReaderTest.txt") ;
【解决方案2】:

你的问题是因为这个

getClass().getResource("./JavaPractice/resources/tests/codeeval/fileReaderTest.txt")

为空。您正在阅读类路径而不是相对路径本身 SO 将您的代码更改为
getClass().getResource("tests/codeeval/fileReaderTest.txt") 并确保资源文件夹位于您的类路径中。另请阅读loading from classpath

【讨论】:

    【解决方案3】:

    试试这个

    InputStream in = Your_Class.class.getClassLoader().getResourceAsStream("resources/tests/codeeval/abc.txt");
    
     assertNotNull(in);
     Reader fr = new InputStreamReader(in, "utf-8");
    

    【讨论】:

    • 'fr' 不可能为 null,但 'in' 可以。
    • 这个想法实际上是修正你的答案
    猜你喜欢
    • 2014-05-09
    • 2016-01-08
    • 2011-04-29
    • 2015-08-14
    • 2016-07-10
    • 2019-03-16
    • 2012-11-24
    • 2020-10-15
    • 1970-01-01
    相关资源
    最近更新 更多