如何从java代码访问Maven资源目录?
我正在尝试访问一个文件(hello.ftl),该文件位于maven项目的resources文件夹中 这是尝试访问目录的类: HellofRemarker.java如何从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
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));
}
}