从类路径文件中获取输入流

时间:2015-08-04 10:25:07

标签: java android maven intellij-idea

在阅读this问题后,我在从使用IntelliJ构建的maven项目的类路径中读取文件时尝试了以下内容:

public class testTemplateManager {

private TemplateManager templateManager;
private String m_includePath;

public void createTemplateManager() {
    String relativePath = "/src/main/java/com/eprosima/templates";
    String fileName = "idlTypes.stg";
    String filePath = relativePath + "/" + fileName;
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    InputStream res = classLoader.getResourceAsStream(var4);
    if(res == null) {
        classLoader = this.getClass().getClassLoader();
        res = classLoader.getResourceAsStream(var4);
    }

    if(res != null) {
        return new BufferedReader(getInputStreamReader(res));
    }
}

无论 relativePath (相对于项目根目录),资源 res 始终为null。我试图使用以下路径,结果相同:

String relativePath = "src/main/java/com/eprosima/templates";
String relativePath = "src/main/java/com.eprosima/templates";

类路径如下所示:

enter image description here

我需要阅读位于 / src / main / java / com / eprosima / templates 中的模板文件。

2 个答案:

答案 0 :(得分:1)

String relativePath = "/src/main/java/com/eprosima/templates";

问题出在这里。 src/main/java不属于您的类路径。它在运行时不存在任何方式。它应该是

String relativePath = "/com/eprosima/templates";

答案 1 :(得分:-1)

试试这个

String relativePath = "./src/main/java/com/eprosima/templates";

例如,我的项目包含com.example.main包。在那个包中,我有“FileTest.java”,代码如下:

package com.example.main;

import java.io.File;

public class FileTest {

/**
 * @param args
 */
public static void main(String[] args) {
    File file = new File("./src/com/example/main/FileTest.java");
    if (file.exists()) {
        System.out.println("existed!");
    } else {
        System.out.println("not exists!");
    }
}

}

然后运行此文件输出打印“存在!”

希望这有帮助!