在Erlang中存储和加载资源文件的常用方法是什么?我需要创建一个人类可读的字典并在应用程序初始化时加载它。例如,在Java中,我将数据放在 .property 文件中,然后将其放在类路径中的某个位置,最后在这样的代码的帮助下加载它:
new Properties().load(Class.getResourceAsStream("/file.properties"))
所以,我有以下问题:
file:consult(Filename)
)答案 0 :(得分:4)
在Erlang中,属性位于* .config文件中,通常是(但不一定要)在项目的根目录中。例如:
您可以通过运行
提供配置文件erl -config myconfig
警告:该文件应命名为" myconfig.config"你应该省略扩展名。
配置文件的结构应该是这样的:
[{Application1, [{Par11,Val11},...]},
...,
{ApplicationN, [{ParN1,ValN1},...]}].
例如:
[{kernel, [
{my_key, "value"}
]}].
在erlang shell中,您可以输入:
application:get_env(kernel, my_key).
{ok,"value"}
我使用了内核应用程序,因为它总是被加载而应用程序:get_env / 2返回undefined,如果没有加载应用程序。您应该在自己的应用程序中放置任何配置,并确保在调用get_env / 2之前加载它。
此外,配置是分层的,您可以将默认值放在* .app文件中,用户通常不需要修改。您可以在配置文件中覆盖它们,最后,您可以在命令行中提供键值对(它们将覆盖配置文件中的内容)。
您可以在此处详细了解配置:
http://www.erlang.org/doc/design_principles/applications.html#id74398
您还可以使用注释使配置文件更加用户友好,例如:
https://github.com/ChicagoBoss/ChicagoBoss/blob/master/skel/boss.config
答案 1 :(得分:1)
我自己找到了答案。存储资源文件的首选路径是priv
目录。 code:priv_dir/1
返回应用程序中priv
目录的路径。
以下是从文件中加载JSON的代码段:
File = filename:join([code:priv_dir(application), "resource.json"]),
{ok, Text} = file:read_file(File),
%% parse json