[英]Getting a resource file as an InputStream in Playframework
Play.classloader.getResourceAsStream(filepath);
文件路径 - 相对于什么? 项目根? 游戏框架根? 绝对路径?
或者可能使用 Play.classloader.getResourceAsStream 是错误的?
在 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
}
}
文档: https : //www.playframework.com/documentation/2.8.0/api/java/play/Environment.html#resourceAsStream-java.lang.String-
相对于类路径根。 也就是说,你的WEB-INF/classes
+ WEB-INF/lib
所有 jars
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.