本质上,我正在使用(或尝试使用)Freemarker,这需要我使用
为模板设置一个文件夹cfg.setDirectoryForTemplateLoading(File dir);
我在
/htmltemplates
中创建了一个文件夹src/main/resources/htmltemplates
。我尝试访问资源的类位于 src/main/java
。
但是,当我尝试使用
URL url = getClass().getResource("/htmltemplates");
File dir = new File(url.toString());
我收到 nullPointerException。我尝试过ClassLoader的各种组合,尝试使用文件而不是目录(没用,他什么也没找到),在StackOverflow上搜索了一个多小时...... 以前我有一个几乎相同的设置,一切都很顺利,但现在 - 什么都没有。试图找出可能不同的地方却导致了绝对的失败。
我一直在通过 IntelliJ 的构建环境运行该程序,还尝试构建一个
.jar
工件(我之前一直在这样做,没问题),然后通过控制台运行它,没有任何效果。有什么想法为什么会发生这种情况吗?
编辑:这变得越来越奇怪。我已经让工作中的其他人尝试过,我们都同时启动了新的 IntelliJ 项目,对它们进行了相同的设置,但他们无法复制我的问题。到底是什么?
您的代码没问题,但是为了让程序在从 IntelliJ 内启动时找到资源,您首先必须使用 Build/Make project 构建您的项目。此构建步骤将文件从 src/main/resources 复制到类输出目录(target/classes 如果您有 Maven 项目),然后类加载器能够找到它们。
您需要设置相对路径而不是绝对路径,就像这样
htmltemplates
不带斜线。
并尝试将任何文件添加到
htmltemplate
文件夹。因为,如果该文件夹为空,IDE 不会在 targe 中创建文件夹
htmltemplate