【发布时间】:2011-07-31 08:24:57
【问题描述】:
Play.classloader.getResourceAsStream(filepath);
文件路径 - 相对于什么?项目根?游戏框架根?绝对路径?
或者可能是 Play.classloader.getResourceAsStream 的用法不对?
【问题讨论】:
标签: java playframework
Play.classloader.getResourceAsStream(filepath);
文件路径 - 相对于什么?项目根?游戏框架根?绝对路径?
或者可能是 Play.classloader.getResourceAsStream 的用法不对?
【问题讨论】:
标签: java playframework
在 Play Framework 中,“conf”目录位于类路径中,因此您可以将文件放在那里并使用 getResourceAsStream 打开它。
例如,如果您创建一个文件“conf/foo.txt”,您可以使用打开它
Play.classloader.getResourceAsStream("foo.txt");
【讨论】:
Play 2.5.x 中已弃用已接受的答案,因为对类加载器之类的全局访问正在慢慢被淘汰。处理此问题的推荐方法是注入play.api.Environment,然后使用其classLoader 获取InputStream,例如
class Controller @Inject()(env: Environment, ...){
def readFile = Action { req =>
...
//if the path is bad, this will return null, so best to wrap in an Option
val inputStream = Option(env.classLoader.getResourceAsStream(path))
...
}
}
【讨论】:
作为使用conf 目录(仅应用于与配置相关的文件)的替代方法,您可以使用public 目录并通过以下方式访问它:
Play.classloader.getResourceAsStream("public/foo.txt")
或者在 Scala 中使用:
Play.resourceAsStream("public/foo.txt")
【讨论】:
注入Environment,然后调用environment.resourceAsStream("filename");
例子:
import javax.inject.Inject;
public class ExampleResource extends Controller{
private final Environment environment;
@Inject
public ExampleResource(Environment environment){
this.environment = environment;
}
public void readResourceAsStream() {
InputStream resource = environment.resourceAsStream("filename");
// Do what you want with the stream here
}
}
【讨论】:
相对于类路径根。也就是你的WEB-INF/classes+WEB-INF/lib中的所有罐子
【讨论】:
WEB-INF/classes