播放2.2.3无法通过Play.application()。资源查看文件

时间:2014-05-12 16:37:04

标签: java playframework-2.2

播放2.2.3。 Windows 7。

public static Result menu() throws IOException {

    String path = Play.application().resource("resources/menu.json").toString();

    String content = Files.toString(new File(path), Charsets.UTF_8);

    return ok(content).as("JSON");
}

出现错误:

  

... scala-2.10 \ classes \ resources \ menu.json文件名,目录   名称或卷标语法不正确

在文件系统中检查该路径,我可以在那里找到我的文件:

..\target\scala-2.10\classes\resources\menu.json

我能在那里找到它。为什么玩不了?

-

更新 我刚想通知我无法在我的机器上的C:\ root文件夹上创建文件。这可能是个问题。但另一方面,我没有访问根文件夹,广告试图获得只读访问权限。无论如何,我确实对该路径上的该文件具有写访问权。

1 个答案:

答案 0 :(得分:1)

实际上,您希望将menu.json文件用作静态资源,您可以将其放入public/resources/menu.json文件中,然后使用简单的文件阅读:

<script>
    $.get('@routes.Assets.at("resources/menu.json")');
</script>

或直接按要求:

http://localhost:9000/assets/resources/menu.json

要通过控制器执行您想要的操作,您需要通过 classpath 读取InputStream(请记住,最后它将存档到 jar 文件中!)但它需要是放在conf文件夹中,即:conf/resources/menu.json然后从控制器:

public static Result menuViaControllerJson() {
    InputStream is = Play.application().classloader().getResourceAsStream("resources/menu.json");
    return (is != null)
            ? ok(is)
            : notFound();
}

无论如何,您将获得与普通Assets.at完全相同的结果,因此请考虑是否值得付出努力。

修改:如果您想将此文件用作自定义配置,请使用HOCON syntax文件,即:conf/ses.conf

foo = "bar"

并在控制器中:

import com.typesafe.config.Config;
import com.typesafe.config.ConfigFactory;

....

Config cfg = ConfigFactory.parseResources(Play.application().classloader(), "ses.conf");
debug("My 'foo' is configured as: " + cfg.getString("foo"));