在Play Framework中将资源文件作为InputStream获取

时间:2011-07-31 08:24:58

标签: java playframework

Play.classloader.getResourceAsStream(filepath); 

filepath - 相对于什么?项目根? playframework root?绝对路径?

或者使用Play.classloader.getResourceAsStream是错误的吗?

5 个答案:

答案 0 :(得分:22)

在Play Framework中,“conf”目录位于类路径中,因此您可以将文件放在那里并使用getResourceAsStream打开它。

例如,如果您创建文件“conf / foo.txt”,则可以使用

打开它
Play.classloader.getResourceAsStream("foo.txt");

答案 1 :(得分:10)

作为使用conf目录(仅应用于与配置相关的文件)的替代方法,您可以使用public目录并通过以下方式访问它:

 Play.classloader.getResourceAsStream("public/foo.txt")

或者在Scala中:

 Play.resourceAsStream("public/foo.txt")

答案 2 :(得分:10)

在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))

    ...
  }
}

答案 3 :(得分:4)

注入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.6.9/api/java/play/Application.html

答案 4 :(得分:-2)

相对于类路径根。也就是说,WEB-INF/classes + WEB-INF/lib

中的所有广告