基本上,我使用(或试图使用)Freemarker,这需要我使用
设置模板的文件夹cfg.setDirectoryForTemplateLoading(File dir);
我已在/htmltemplates
中创建了一个文件夹src/main/resources/htmltemplates
。尝试访问资源的I类在src/main/java
。
然而,当我尝试使用
时URL url = getClass().getResource("/htmltemplates");
File dir = new File(url.toString());
我得到一个nullPointerException。我尝试过ClassLoader的各种组合,尝试使用文件而不是目录(没用,他什么也没发现),在StackOverflow上搜索了一个多小时...... 我之前的场景几乎完全相同,一切都在游泳,但现在 - 没什么。尝试找出可能不同的东西导致了绝对的琐事。
我一直在通过IntelliJ的构建环境运行该程序,还尝试构建一个.jar
工件(我之前一直在做,没有问题),然后通过控制台,没什么用。任何想法为什么会发生这种情况?
答案 0 :(得分:0)
你需要设置相对路径而不是绝对路径,比如这个htmltemplates
没有斜线。
并尝试将任何文件添加到htmltemplate
文件夹。因为,如果此文件夹为空,则IDE不会在 target \ classes 路径中创建文件夹htmltemplate
。
在运行您的应用程序之前,请在 Build>中创建项目。制作项目菜单项。
答案 1 :(得分:0)
您的代码没问题,但是为了让程序在从IntelliJ中启动时找到资源,您首先必须使用 Build / Make project 构建项目。此构建步骤将文件从 src / main / resources 复制到类输出目录( target / classes ,如果您有maven项目),然后类加载器能够找到他们。
答案 2 :(得分:0)
我有同样的问题,希望我能帮到你。 我通过将useResource.java放在与resourceFile.txt相同的包层次结构中来解决它 在请求resourceFile.txt的useResource.java中,我只是写了名字,好像它们在同一个目录中一样。
例如,我在useResource.java代码中写了这一行: database.insertMultipleEntriesAsCSV( “resourceFile.txt”));
useResource.java位于“java”目录中名为“database”的目录中,而resourceFile.txt位于“resources”目录中名为“database”的目录中。 请注意,在Project Structure中,我将“java”目录标记为“Test”,将“resources”目录标记为“Resources”。
最诚挚的问候, Tomer