繁体   English   中英

在 Playframework 中获取资源文件作为 InputStream

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM