如何在Erlang中加载资源文件

如何在Erlang中加载资源文件,erlang,Erlang,在Erlang中存储和加载资源文件的常用方法是什么。我需要创建一个人类可读的字典,并在应用程序初始化时加载它。例如,在Java中,我会将数据放在.property文件中,然后将其放在类路径中的某个位置,最后在如下代码的帮助下加载: new Properties().load(Class.getResourceAsStream("/file.properties")) 因此,我有以下问题: 我可以(必须)在哪里保存资源文件 如何在运行时确定资源文件的路径 如何加载它(例如文件:查阅(文件名))

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

new Properties().load(Class.getResourceAsStream("/file.properties"))
因此,我有以下问题:

  • 我可以(必须)在哪里保存资源文件
  • 如何在运行时确定资源文件的路径
  • 如何加载它(例如
    文件:查阅(文件名)

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

[{kernel, [
    {my_key, "value"}
]}].
  • 芝加哥老板有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文件中,用户通常不必修改该文件。您可以在配置文件中覆盖它们,最后,您可以在命令行中提供键值对(它们将覆盖配置文件中的内容)

您可以在此处阅读有关配置的更多信息:

您还可以使用注释使配置文件更易于使用,例如:


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

[{kernel, [
    {my_key, "value"}
]}].
  • 芝加哥老板有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文件中,用户通常不必修改该文件。您可以在配置文件中覆盖它们,最后,您可以在命令行中提供键值对(它们将覆盖配置文件中的内容)

您可以在此处阅读有关配置的更多信息:

您还可以使用注释使配置文件更易于使用,例如:


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

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

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

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

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

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

对于静态资源,如html模板、css文件、图像和其他,也是如此。对于用户可以更改的动态配置,最好使用*.config,正如我在回答中所指出的,但是如果您的资源是静态的,那么您就没有错。对于静态资源,如html模板、css文件、图像和其他,这是正确的。对于用户可以更改的动态配置,最好使用*.config,正如我在回答中指出的那样,但如果您的资源是静态的,那么您就没有错。