Play.classloader.getResourceAsStream(filepath);
filepath - 相对于什么?项目根? playframework root?绝对路径?
或者使用Play.classloader.getResourceAsStream是错误的吗?
答案 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