Получение входного потока из файла classpath

Прочитав этот вопрос, я попробовал следующее при чтении файла из пути к классам проекта maven, созданного с помощью IntelliJ:

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 всегда равен нулю независимо от relativePath (относительно корневого каталога проекта). Я пытался использовать следующие пути с тем же результатом:

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

Путь к классам выглядит так:

введите здесь описание изображения

Мне нужно прочитать файлы шаблонов, расположенные в /src/main/java/com/eprosima/templates.


person Sebi    schedule 04.08.2015    source источник


Ответы (2)


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

Проблема здесь. src/main/java не является частью вашего пути к классам. Его нет ни в коем случае во время выполнения. Так должно быть

String relativePath = "/com/eprosima/templates";
person user207421    schedule 04.08.2015
comment
Выход все тот же. res всегда остается нулевым. - person Sebi; 04.08.2015
comment
Попробуйте без ведущего /. - person user207421; 05.08.2015

Попробуй это

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

Например, у меня есть проект с пакетом com.example.main. В этом пакете у меня есть «FileTest.java» со следующим кодом:

package com.example.main;

импортировать java.io.File;

открытый класс 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!");
    }
}

}

затем запустите этот файл, вывод печатает "existed!"

Надеюсь, это поможет!

person congtuyenvip    schedule 05.08.2015
comment
Это не будет. Каталога src не будет во время выполнения вне среды IDE. - person user207421; 05.08.2015