Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从java代码访问Maven资源目录?_Java_Maven_Freemarker - Fatal编程技术网

如何从java代码访问Maven资源目录?

如何从java代码访问Maven资源目录?,java,maven,freemarker,Java,Maven,Freemarker,我正在尝试访问一个文件(hello.ftl),该文件位于maven项目的resources文件夹中 这是尝试访问目录的类: HellofRemarker.java package mypackage.main; import freemarker.template.Configuration; import freemarker.template.DefaultObjectWrapper; import freemarker.template.Template; import freemark

我正在尝试访问一个文件(hello.ftl),该文件位于maven项目的resources文件夹中

这是尝试访问目录的类:

HellofRemarker.java

package mypackage.main;

import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;

import java.io.File;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;


public class HelloFreemarker {

    public static void main(String[] args) throws IOException, TemplateException {
        Configuration cfg = new Configuration();
        cfg.setObjectWrapper(new DefaultObjectWrapper());

        cfg.setDirectoryForTemplateLoading(new File("."));

        Map<String, Object> model = new HashMap<String, Object>();
        model.put("name", "World");

        Template template = cfg.getTemplate("hello.ftl");
        template.process(model, new OutputStreamWriter(System.out));
    }
}

这是添加注释的人建议对代码进行一些更改后的HellofRemarker类:

package mypackage.main;

import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;

import java.io.File;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;


public class HelloFreemarker {

    public static void main(String[] args) throws IOException, TemplateException {
        Configuration cfg = new Configuration();
        cfg.setObjectWrapper(new DefaultObjectWrapper());

        String path = HelloFreemarker.class.getResource("../..").getPath();

        cfg.setDirectoryForTemplateLoading(new File(path));

        Map<String, Object> model = new HashMap<String, Object>();
        model.put("name", "World");

        Template template = cfg.getTemplate("hello.ftl");
        template.process(model, new OutputStreamWriter(System.out));
    }
}
package mypackage.main;
导入freemarker.template.Configuration;
导入freemarker.template.DefaultObjectWrapper;
导入freemarker.template.template;
导入freemarker.template.TemplateException;
导入java.io.File;
导入java.io.IOException;
导入java.io.OutputStreamWriter;
导入java.util.HashMap;
导入java.util.Map;
公共类HellofRemarker{
公共静态void main(字符串[]args)引发IOException、TemplateException{
Configuration cfg=新配置();
setObjectWrapper(新的DefaultObjectWrapper());
字符串路径=helloferemarker.class.getResource(“....”).getPath();
setDirectoryForTemplateLoading(新文件(路径));
映射模型=新的HashMap();
模型。put(“名称”、“世界”);
Template=cfg.getTemplate(“hello.ftl”);
流程(模型,新的OutputStreamWriter(System.out));
}
}

从编译类的目录到文件所在的目录(target/classes)需要两个directory up命令。

您是否尝试过使用
helloferemarker.class.getResource(“hello.ftl”)
helloferemarker.class.getResource(“/hello.ftl”)?这假设
Configuration#getTemplate
接受
URL
来获取类路径中的文件路径,您必须编写getClass().getResource(“/hello.ftl”).getPath()谢谢大家,HelloRemarket.class.getResource(....).getPath()行为我提供了正确的字符串变量作为新文件()的参数对象创建。将您的解决方案作为正式答案发布,以帮助他人。干得好好啊我马上发布解决方案!FreeMarker不需要
文件来加载模板,它可以直接加载“资源”。请参见
cfg.setClassForTemplateLoading
package mypackage.main;

import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;

import java.io.File;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;


public class HelloFreemarker {

    public static void main(String[] args) throws IOException, TemplateException {
        Configuration cfg = new Configuration();
        cfg.setObjectWrapper(new DefaultObjectWrapper());

        String path = HelloFreemarker.class.getResource("../..").getPath();

        cfg.setDirectoryForTemplateLoading(new File(path));

        Map<String, Object> model = new HashMap<String, Object>();
        model.put("name", "World");

        Template template = cfg.getTemplate("hello.ftl");
        template.process(model, new OutputStreamWriter(System.out));
    }
}