我了解 Google App Engine (GAE) 允许您使用以下几种方法读取爆炸 WAR 中的任何文件:
String file = "/WEB-INF/name-of-my-filexml";
InputStream in = getClass().getResourceAsStream(file);
问题是,我需要使用如下目录结构部署我的 Web 应用程序:
MyApp/
WEB-INF/
lib/
classes/
web.xml
appengine-web.xml
...
profiles/
fizz.txt
buzz.txt
foo.txt
... dozens of other text files
我需要一种将每个profiles/*.txt
文件读入 Java 字符串的方法。在任何人评论好之前,为什么不直接对字符串进行硬编码,伙计......,让我们说我在这里删减了很多背景故事,以便发布一个简单的问题。幽默我,让我们假装我不能硬编码字符串。通常,如果我可以完全访问java.io.*
,我会执行以下操作:
File profilesHome = new File("path/to/profiles");
File[] profiles = profilesHome.listFiles();
List<String> profileList = new ArrayList<String>();
for(File profile : profiles)
profileList.add(readFileIntoString(profile));
但是在这里,我认为我不能调用File#listFiles()
,如果我所拥有的InputStream
只是我从中得到的getClass().getResourceAsStream(file)
,我不确定如何将其转换为File
句柄或字符串对象。有任何想法吗?提前致谢。
更新:使用ZipInputStream
建议:
InputStream inputStream = event.getServletContext()
.getResourceAsStream("/WEB-INF/profiles.zip");
ZipInputStream zipInputStream = new ZipInputStream(inputStream);
List<String> list = new ArrayList<String>();
ZipEntry currEntry;
try {
while((currEntry = zipInputStream.getNextEntry()) != null)
// TODO: How to convert the contents of currEntry to a string
// in a manner that is GAE-friendly?
list.add(convertEntryContentsToString(currEntry));
} catch (IOException e) {
e.printStackTrace();
}
现在,我该如何实施convertEntryContentsToString(ZipEntry)
?