2011-08-20 33 views
8

Cách thích hợp để viết danh sách các tệp XML bằng cách sử dụng JAXB trực tiếp vào kho lưu trữ zip mà không cần sử dụng thư viện của bên thứ ba.Làm cách nào để ghi các tệp XML trực tiếp vào kho lưu trữ zip?

Sẽ tốt hơn nếu chỉ viết tất cả các tệp XML vào một thư mục và sau đó nén?

+0

Tại sao bạn sẽ viết một tệp XML bằng JAXB? Tại sao bạn không sao chép nó vào zip trực tiếp –

+0

Zip là nhiều hơn để lưu trữ tất cả mọi thứ thay vì nén nó. Mặc dù trình soạn thảo của nó thực sự xử lý các tệp i cần một giải pháp cho phép tôi thay đổi các tệp bên ngoài trình chỉnh sửa để thay đổi nhanh chóng. – kdgwill

Trả lời

10

Như những người khác đã chỉ ra, bạn có thể sử dụng lớp ZipOutputStream để tạo tệp ZIP. Bí quyết để đặt nhiều tệp trong một tệp ZIP là sử dụng các mô tả ZipEntry trước khi viết (marshalling) dữ liệu XML JAXB trong ZipOutputStream. Vì vậy, mã của bạn có thể trông giống như thế này:


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

Tôi không biết JAXB phải làm gì với mọi thứ, cũng như nội dung tệp XML là nội dung tệp. Câu hỏi của bạn thực sự là "Làm cách nào để xuất các ký tự trực tiếp vào lưu trữ zip"

Để làm điều đó, hãy mở ZipOututStream và sử dụng API để tạo mục nhập rồi viết nội dung cho mỗi mục nhập. Hãy nhớ rằng một kho lưu trữ zip giống như một loạt các tệp được đặt tên trong kho lưu trữ.

btw, ZipOututStream là một phần của JDK (tức là nó không phải là một "thư viện")

3

Các "đúng" cách — mà không sử dụng một thư viện của bên thứ 3 — sẽ được sử dụng java.util.zip.ZipOutputStream.

Cá nhân, mặc dù, tôi thích TrueZip.

TrueZIP là một khung công tác dựa trên Java cho hệ thống tệp ảo (VFS), cung cấp quyền truy cập trong suốt vào tệp lưu trữ như thể chúng chỉ là các thư mục đơn giản.

+0

+1 cùng một câu trả lời + Mẹo TrueZip :) – Bohemian

Các vấn đề liên quan