gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:43:24 26 4
gpt4 key购买 nike

我正在尝试访问位于 Maven 项目的资源文件夹中的文件 (hello.ftl)。

这是尝试访问目录的类:

HelloFreemarker.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));
}
}

我在控制台中收到的错误如下:

Exception in thread "main" java.io.FileNotFoundException: Template "hello.ftl" not found.
at freemarker.template.Configuration.getTemplate(Configuration.java:742)
at freemarker.template.Configuration.getTemplate(Configuration.java:665)
at mypackage.main.HelloFreemarker.main(HelloFreemarker.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)

Process finished with exit code 1

最佳答案

这是添加注释的人建议的一些代码更改后的 HelloFreemarker 类:

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

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

关于java - 如何从java代码访问Maven资源目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24884366/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com