从类路径文件获取输入流

3

阅读了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));
    }
}

无论相对于项目根目录的路径是什么,资源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个回答

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

问题出在这里。src/main/java不是你的类路径的一部分。它在运行时根本不存在。应该是这样的。
String relativePath = "/com/eprosima/templates";

输出仍然相同。res 始终保持为 null。 - Sebi
尝试不带前导/运行。 - user207421

-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!");
    }
}

}

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

希望这可以帮助!


不会的。在IDE之外的运行时,src目录将不会存在。 - user207421

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接