簡體   English   中英

如何從 zip 文件中讀取 XML 文件?

[英]How to read an XML file from a zip file?

是否可以在 Java 中使用 InputStreamReader 讀取 XML?

我有一個 zip 文件中的 XML 文件,但我無法讀取該文件。 我該怎么做?

我的代碼:

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

public class testDenemeZipEXtract {

    public static void main(String[] args) {
        try {
            ZipFile zipFile = new ZipFile("/home/user/Documents/file.zip");
            Enumeration<? extends ZipEntry> entries = zipFile.entries();

            while(entries.hasMoreElements()){
              ZipEntry entry = entries.nextElement();
              InputStream stream = zipFile.getInputStream(entry);

              if(String.valueOf(entry.getName()).contains(".xml")) {
                BufferedReader bf = new BufferedReader(new InputStreamReader(stream));
                while(bf.readLine()!=null){
                  System.out.println(bf.readLine());
                }
              }
            }   
        }catch(Exception e) {}
    }
    
} 

通過運行這個 java 類,我得到了這個響應;

回應圖片

此代碼不會將 xml 打印為原始文本。 我該怎么做 ?

如果您想要原始輸出,您可以將 XML 轉換為來自 ZipInputStream 的字符串。

new String(zipInputStream.readAllBytes(), StandardCharsets.UTF_8);

這將返回一個字符串。 但是,它不會在 SAX 文檔構建器中正確處理。 這是格式錯誤的輸出。

    // org.apache.commons.io.FileUtils
    String zipSource = "/{user.home}/path/to/file.zip";
    try {
        ZipFile zipFile = new ZipFile(new File(zipSource));
        Enumeration<? extends ZipEntry> zipEntries = zipFile.entries();
        while (zipEntries.hasMoreElements()) {
            ZipEntry zipEntry = zipEntries.nextElement();
            String filename = FileUtils.basename(zipEntry.getName().toLowerCase(Locale.ROOT));
            if(filename.contains("xccdf") && filename.endsWith("xml")) {
                System.out.println(zipEntry.getName());
                String text = new String(zipFile.getInputStream(zipEntry).readAllBytes(), StandardCharsets.UTF_8);
                System.out.println(text);
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM