如何在Play Framework 2.2.1中读取文件?

8

我有一个静态文件,想在我的Play框架模型中读取它。该文件包含一些简单的文本内容。我无法找到任何示例或API,显示存储此类资源的适当位置,并且如何访问该资源。不管怎样,我正在使用Scala Play,但我不认为这里是相关的。


1
没有任何与Play相关的内容。请参考这个问题:https://dev59.com/onM_5IYBdhLWcg3wp0-l - Carsten
@Carsten,请将评论更改为答案 :) - biesior
3个回答

7

没有真正指定数据文件应该放在哪里的地方。通常我会在application.conf中设置路径,然后通过应用程序读取它。

Play.application().configuration.getString("my.data.path")

如果您想将其存储在Play应用程序目录内的某个位置,可以通过以下方式获取其根路径:
Play.application().path()

该方法返回一个 java.io.File 对象。

在读取文件时,没有特定于Play框架的技术。这个问题之前已经被问过和回答过了,详情请参见此处。简而言之,如果要读取一个小文本文件,只需执行以下操作:

val lines = scala.io.Source.fromFile("file.txt").mkString

我该如何使用一个将配置存储在某个properties/目录中的第三方库?我可以修改第三方库,但不能使用任何Play特定的方法(即,仅使用纯Scala代码)。 - Jus12
@Jus12 我不太明白你想要什么。你最好单独提出这个问题(并详细说明一下)。 - Carsten
我想问的是,第三方应用程序将文件保存在特定文件夹中,并且不能从 Play._ 导入任何内容。当作为外部依赖项在 Play 中使用时,它如何仍然能够读取其文件? - Jus12

3

1
我已经在https://stackoverflow.com/a/37180103/5715934回答过类似的问题。我认为相同的答案也适用于您。
您可以选择喜欢的位置,而不是专门用于某些特定任务的文件夹。例如,您可以创建/resources文件夹。不要在/app文件夹内创建任何资源文件夹,因为它仅是存储代码的位置。其他特定文件夹也是如此。然后您可以使用。
import import play.Play; 
    Play.application().getFile("relative_path_from_<Project_Root>);

访问代码内部的文件。

只有在开发环境中才能完美运行。但是,一旦将其放到生产环境中使用dist文件,它将无法工作,因为您放置的整个资源文件夹不会被添加到dist中。为了解决这个问题,您必须明确要求play也将/resources文件夹添加到您的dist中。为此,您需要转到/build.sbt并添加以下行:

import com.typesafe.sbt.packager.MappingsHelper._
    mappings in Universal ++= directory(baseDirectory.value / "resources")

现在,如果您检查dist文件夹,您会发现它有一个名为“resources”的额外文件夹。这样它就可以在生产环境中工作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接