2011-08-20 147 views
8

如何在不使用第三方庫的情況下將使用JAXB的XML文件列表直接寫入zip存檔的正確方法是什麼?如何直接將XML文件寫入zip壓縮文件?

將所有的XML文件寫入一個目錄然後壓縮會更好嗎?

+0

爲什麼要使用JAXB編寫XML文件?你爲什麼不直接將它複製到壓縮文件中 –

+0

壓縮文件更多的是壓縮一切而不是壓縮它。雖然它的真正處理文件的編輯器需要一個解決方案,它允許我在編輯器之外更改文件以進行快速更改。 – kdgwill

回答

10

正如其他人指出的那樣,您可以使用ZipOutputStream類創建ZIP文件。將多個文件放在一個ZIP文件中的技巧是在編寫(編組)ZipOutputStream中的JAXB XML數據之前使用ZipEntry描述符。因此,您的代碼可能看起來與此類似:


JAXBElement jaxbElement1 = objectFactory.createRoot(rootType); 
JAXBElement jaxbElement2 = objectFactory.createRoot(rootType); 

ZipOutputStream zos = null; 
try { 
    zos = new ZipOutputStream(new FileOutputStream("xml-file.zip")); 
    // add zip-entry descriptor 
    ZipEntry ze1 = new ZipEntry("xml-file-1.xml"); 
    zos.putNextEntry(ze1); 
    // add zip-entry data 
    marshaller.marshal(jaxbElement1, zos); 
    ZipEntry ze2 = new ZipEntry("xml-file-2.xml"); 
    zos.putNextEntry(ze2); 
    marshaller.marshal(jaxbElement2, zos); 
    zos.flush(); 
} finally { 
    if (zos != null) { 
    zos.close(); 
    } 
} 
1

我不知道JAXB和任何東西有什麼關係,XML文件內容也不是文件內容。你的問題真的是「我怎樣才能直接輸出字符到一個zip檔案」

要做到這一點,打開ZipOututStream並使用API​​創建條目,然後寫入內容到每個條目。請記住,zip存檔就像存檔中的一系列命名文件。

順便說一句,ZipOututStream是JDK的一部分(即它不是一個「庫」)

3

,而無需使用第三方庫—是使用java.util.zip.ZipOutputStream的「正確」的方式—。

個人而言,我更喜歡TrueZip

TrueZIP是一個基於Java的虛擬文件系統(VFS)插件框架,它提供對存檔文件的透明訪問,就像它們只是普通目錄一樣。

+0

+1相同的答案+ TrueZip提示:) – Bohemian