我需要阅读一个zip文件并将其内容转换为Bundle对象。 SUB_BUNDLE目录是递归的。
文件内容:
file1.json
file2.xml
file3.xml
SUB_BUNDLE/w2/file4.json
SUB_BUNDLE/w2/file5.json
SUB_BUNDLE/w2/PDF_TEMPLATE/
SUB_BUNDLE/w2/PDF_TEMPLATE/file6.pdf
SUB_BUNDLE/w3/file7.json
SUB_BUNDLE/w3/file8.json
SUB_BUNDLE/w3/SUB_BUNDLE/w4/file9.json
SUB_BUNDLE/w3/SUB_BUNDLE/w4/file10.json
SUB_BUNDLE/w5/file11.json
PDF_TEMPLATE/file12.pdf
我尝试像这样从上面的目录数据创建一个Bundle对象:
files: [ 'file1.json', 'file2.xml', 'file3.xml' ],
pdfTemplates: [ 'file12.pdf' ],
subBundles: [
w2: {
files: [ 'file4.json', 'file5.json' ],
subBundles: [ ],
pdfTemplates: [ 'file6.pdf' ]
}
w3: {
files: [ 'file7.json', 'file8.json' ],
pdfTemplates: [ ],
subBundles: [
w4: {
files: [ 'file9.json', 'file10.json' ],
subBundles: [ ],
pdfTemplates: [ ]
}
]
}
w5: {
files: [ 'file11.json' ],
subBundles: [ ],
pdfTemplates: [ ]
}
]
Bundle类
public class Bundle () {
protected List<Bundle> files = new ArrayList();
protected List<Bundle> pdfTemplates = new ArrayList();
protected List<Bundle> subBundles = new ArrayList();
public Bundle () { }
public void addSubBundle(Bundle bundle) {
subBundles.add(bundle);
}
public void addPdfTemplate(String pdfTemplate) {
pdfTemplates.add(pdfTemplate);
}
public void addFile(String file) {
files.add(file);
}
}
我尝试了很多事情,但这是我的起点,它将如上所述返回Bundle对象:
public Bundle unpack(InputStream inputStream, Bundle bundle) throws IOException {
ZipInputStream zipInputStream = new ZipInputStream(inputStream);
ZipEntry entry;
while ((entry = zipInputStream.getNextEntry()) != null) {
final String entryName = entry.getName();
if (entry.isDirectory()) {
final String[] parts = entryName.split("/");
final String folder = parts[parts.length - 1];
if(folder.equlas("PDF_TEMPLATE")) {
bundle.addPdfTemplate(entryName);
} else {
Bundle newBundle = new Bundle();
// fill this new bundle's file,pdfTepmlates and subBundles and then add into its parent as subSubdle
bundle.addSubBundle(newBundle);
}
} else {
bundle.addFile(entryName);
}
}
return bundle;
}
我知道我需要在某个地方递归循环,但我无法做到这一点。你能帮我吗?