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

如何在grails中读取src/main/resources中的文件,grails,Grails,以前有人问过这个问题,我尝试过每一个建议的解决方案,但都失败了 我在myapp/src/main/resources中放了一个javascript文件(hl.js) 我试着用取自“解决方案”的以下代码来阅读它: 1-getRsourcesAsStream。返回空的inputstream InputStream is = this.class.classLoader.getResourceAsStream("hl.js") 2-getResource-返回null File myFile =

以前有人问过这个问题,我尝试过每一个建议的解决方案,但都失败了

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

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

1-getRsourcesAsStream。返回空的inputstream

 InputStream is = this.class.classLoader.getResourceAsStream("hl.js")
2-getResource-返回null

 File myFile = grailsApplication.mainContext.getResource("hl.js").file
3-getResourceAsStream with classloader-返回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的“go to declaration”从来都不起作用(可能是netbeans中的一些配置问题)

事实证明,我正在使用的eval()版本需要一个读卡器,正如默认文档所示,它需要在InputStream中读卡器。此外,reader与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)

获取资源并在其上打开流

    def resource = this.class.classLoader.getResource('conf.json')
    def path = resource.file // absolute file path
    return resource.openStream() // input stream for the file
资料来源: