【发布时间】:2010-12-23 14:54:45
【问题描述】:
我有以下文件
/app/menus/menu1.yml
我想看看它的内容
--
简短回答:
fileContent = play.vfs.VirtualFile.fromRelativePath("/app/menus/menu1.yml").contentAsString();
【问题讨论】:
标签: file filesystems playframework
我有以下文件
/app/menus/menu1.yml
我想看看它的内容
--
简短回答:
fileContent = play.vfs.VirtualFile.fromRelativePath("/app/menus/menu1.yml").contentAsString();
【问题讨论】:
标签: file filesystems playframework
PlayFramework 是使用 Java 语言构建的。
在您的代码中,对 java API 的使用没有限制。 因此,如果您知道文件的绝对路径,则可以使用标准 java 代码读取您的文件:
java.io.File yourFile = new java.io.File("/path/app/menus/menu1.yml");
java.io.FileReader fr = new java.io.FileReader(yourFile);
// etc.
如果您想从 Play 应用程序访问相对路径中的文件,您可以使用 play "VirtualFile" 类:http://www.playframework.org/documentation/api/1.1/play/vfs/VirtualFile.html
VirtualFile vf = VirtualFile.fromRelativePath("/app/menus/menu1.yml");
File realFile = vf.getRealFile();
FileReader fr = new FileReader(realFile);
// etc.
【讨论】:
VirtualFile.fromRelativePath 对于 play 2.1 未定义。改用什么?
对于 Scala 中的 Play 2.0,您想使用 Play.getFile(relativePath: String)
【讨论】:
Play 包含SnakeYAML 解析器。来自他们的docs:
Yaml yaml = new Yaml();
String document = "\n- Hesperiidae\n- Papilionidae\n- Apatelodidae\n- Epiplemidae";
List<String> list = (List<String>) yaml.load(document);
System.out.println(list);
['Hesperiidae', '凤蝶科', 'Apatelodidae','Epiplemidae']
还有一个版本的Yaml.load 采用InputStream,在此示例代码中演示:http://code.google.com/p/snakeyaml/source/browse/src/test/java/examples/LoadExampleTest.java
【讨论】:
从 Play 2.6 开始,它现在位于环境中。我建议使用.getExistingFile,它在文件不存在的情况下返回一个选项。或者 .resource 仅返回指向类路径中任何内容的 URL。
https://www.playframework.com/documentation/2.6.x/api/scala/index.html#play.api.Environment
class Someclass @Inject (environment: play.api.Environment) {
// ...
environment.getExistingFile("data/data.xml").fold{
// NO FILE. PANIC
}{ file =>
// Do something magic with file
}
【讨论】: