gpt4 book ai didi

grails - 如何在grails中读取src/main/resources中的文件

转载 作者:行者123 更新时间:2023-12-02 14:48:17 25 4
gpt4 key购买 nike

之前已经有人问过这个问题,我已经尝试了每种建议的解决方案,但都失败了。

我已经在myapp / src / main / resources中放置了一个javascript文件(hl.js)

我尝试使用以下来自“解决方案”的代码阅读它:

1-getRsourcesAsStream。返回null输入流。

 InputStream is = this.class.classLoader.getResourceAsStream("hl.js")

2-getResource-返回null
 File myFile = grailsApplication.mainContext.getResource("hl.js").file

3-带类加载器的getResourceAsStream-返回null。
 ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
InputStream is = classLoader.getResourceAsStream("hl.js");

有趣的是,如果我执行以下操作:
 String fileNameAndPath = this.class.classLoader.getResource("hl.js").getFile()
System.out.println(fileNameAndPath);
File file = new File(fileNameAndPath)
InputStream is = file.newInputStream();

打印输出:
/Users/me/dev/grails_projects/myapp/src/main/resources/hl.js

但是“is”始终为空。

我试图获取输入流,所以我可以通过nashorn评估javascript:
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
engine.eval(is)

Grails 3.3.8

有任何想法吗?

最佳答案

好吧,我不知道为什么解决方案1、2和3不起作用,但是我发现了一种行之有效的方法。主要问题是eval()有许多不同的实现,而netbeans的“去声明”从未起作用(大概是netbeans中的一些配置问题)。

事实证明,我恰好使用的eval()版本期望使用Reader,默认文档在InputStream中显示了它的需求。另外,阅读器与InputStreamReader也不相同。

这是我发现的解决方案:

import javax.script.ScriptEngine
import javax.script.ScriptEngineManager
import org.grails.core.io.ResourceLocator

ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
String fileNameAndPath = this.class.classLoader.getResource("hl.js").getFile()
System.out.println(fileNameAndPath);
File file = new File(fileNameAndPath)
System.out.println("exists: " + file.exists())
Reader reader = file.newReader();
engine.eval(reader)

关于grails - 如何在grails中读取src/main/resources中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58304834/

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