从Grails中的java类读取属性文件

从Grails中的java类读取属性文件,java,grails,properties,Java,Grails,Properties,我将urls.properties放在conf文件夹和src/java文件夹中,但是当我想从grails项目中的java类中读取此文件时,我得到一个错误:java.io.FileNotFoundException:urls.properties(系统找不到指定的文件) 我尝试使用以下代码读取此文件: io = new FileInputStream("urls.properties"); prop.load(io); url = prop.getProperty(urlName); 什么是错误

我将urls.properties放在conf文件夹和src/java文件夹中,但是当我想从grails项目中的java类中读取此文件时,我得到一个错误:
java.io.FileNotFoundException:urls.properties(系统找不到指定的文件)

我尝试使用以下代码读取此文件:

io = new FileInputStream("urls.properties");
prop.load(io);
url = prop.getProperty(urlName);
什么是错误的,为什么我会出现这个错误?我在Config.groovy中有一个conf参数

grails.config.locations = ["classpath:urls.properties"]

有关加载外部配置文件的信息,请参阅手册中的本章:

使用grails.config.locations指定属性文件后,在启动应用程序时会自动加载属性,因此grailsApplication.config对象中的属性应该已经可以访问,如下所示:

def grailsApplication // Injects the grailsApplication object to your service/controller
...
grailsApplication.config.myproperty 
在此处阅读有关如何访问配置属性的更多信息:

您试图对代码执行的操作是从当前工作目录加载一个文件,而该文件可能不存在。因此产生了错误代码

编辑

如果要加载类路径中存在的文件,则应将其作为资源加载。像这样:

        InputStream is = MyClass.class.getResourceAsStream("urls.properties");

…其中MyClass是与URL.properties位于同一个包中的类。不要忘了检查流是否为空,因为如果它无法加载资源就会为空。

但是我如何从Java类而不是Groovy类读取此参数呢?啊,这就是问题所在。如果您想让它变得复杂,请参阅这篇博文:Se my edit,了解如何从java中的资源加载文件。这可能是一个更快的解决方案。