繁体   English   中英

如何在Erlang中加载资源文件

[英]How to load the resource file in Erlang

在Erlang中存储和加载资源文件的常用方法是什么。 我需要创建一个人类可读的字典,并在应用程序初始化时加载它。 例如,在Java中,我会将数据放在.property文件中,然后将其放在类路径中的某个位置,最后借助如下代码加载:

new Properties().load(Class.getResourceAsStream("/file.properties"))

因此,我有以下问题:

  • 我在哪里(必须)保留资源文件?
  • 如何在运行时确定资源文件的路径
  • 如何加载(例如file:consult(Filename)

在Erlang中,属性位于* .config文件中,该文件通常位于(但不必位于)项目的根目录中。 例如:

  • 芝加哥老板有boss.config
  • RabbitMQ具有rabbitmq.config
  • Zotonic对于存储在priv / sitename / 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"}

我使用了内核应用程序,因为它总是被加载,如果应用程序未加载,则application: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

我自己找到了答案。 存储资源文件的首选路径是priv目录。 code:priv_dir/1返回应用程序中priv目录的路径。

以下是从文件加载JSON的代码段:

File = filename:join([code:priv_dir(application), "resource.json"]),
{ok, Text} = file:read_file(File),
%% parse json

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM