应用程序运行时无法创建文件

时间:2015-06-23 04:53:11

标签: java playframework

我遇到了一个奇怪的问题。

我有这条路径,我想用于我的应用程序:

private final String PNG_PATH = "cache/plugins/sonarrtv/images/";

如果文件夹不存在,我将创建它。这没有问题,但是一旦我想在这个文件夹中创建文件,它就会失败,但只有当我使用'stage'命令在已部署的应用程序上运行时才会失败。如果我运行它./activator运行然后它工作

[info] - application - FULL_PNG Path: /Users/gz/Cloud/Dev/Java/HomeDash/target/universal/stage/cache/plugins/sonarrtv/images Writable ? false
[info] - application - f Path: /Users/gz/Cloud/Dev/Java/HomeDash/target/universal/stage/cache/plugins/sonarrtv/images/247808-fanart.jpg

它表示该文件夹不可写。我尝试以编程方式将其设置为可写,但没有区别。我检查过,我是创建的新文件夹的所有者,因此不应该是一个问题。

这是我用来创建文件夹的代码:

File f = new File(PNG_PATH);
if (!f.exists()) {
    f.mkdirs();
}
f.setWritable(true);
f.deleteOnExit();

以及我如何创建文件:

File f = new File(PNG_PATH + series.getSeriesId() + "-fanart.jpg");
FileUtils.copyURLToFile(new java.net.URL(poster), f);

1 个答案:

答案 0 :(得分:0)

好的,我设法找到了更好的方法。我实际上是使用以下命令从配置加载user.dir:

ConfigFactory.load().getString("user.dir")+"/cache/";

这适用于应用程序生命周期的每个阶段。 Play.application()。getPath()如果在一个急切的绑定单例上调用,表示该应用程序未启动,则会抛出错误。