[Source Code]JAVA I/O --- --- 读取.zip文件,以及zip中的.xml文件

这篇博客展示了如何使用Java I/O从ZIP文件中读取XML文件。通过`ZipFile`和`ZipEntry`类遍历ZIP内容,找到XML文件并使用DOM解析器或DOM4J库进行解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.mycompany.iotest;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

public class FileTest {

   
    public void readZipFile(File thefile){
        StringBuffer xmlList = new StringBuffer();
        StringBuffer directories = new StringBuffer();
        try {
            ZipFile zfile = new ZipFile(thefile);
            Enumeration emu = zfile.entries();
            int i = 1;
            Object obj = null;
            while ( emu.hasMoreElements() ) {
                obj = emu.nextElement();
                String temp = obj.toString();
                System.out.println(i++ +" : "+ temp);
               
                ZipEntry entry = (ZipEntry)obj;
                System.out.println("entry name = "+entry.getName());
               
                //collect xml files
                if ( temp.endsWith("xml") ) {
                    xmlList.append(temp.substring(temp.lastIndexOf("/")+1));
                    xmlList.append("/n");
                }
               
                //collect directories
                if ( entry.isDirectory() ) {
                    directories.append(entry.getName());
                    directories.append("/n");
                }
            }
           
            System.out.println("***********************************");
            System.out.println("XML Files : /n"+xmlList.toString());
            System.out.println("Directories : /n"+directories);
        } catch ( ZipException e ) {
            e.printStackTrace();
        } catch ( IOException e ) {
            e.printStackTrace();
        }
    }
   
    public void readXMLInZip(File thefile){
        InputStream inputstream = null;
        try {
            ZipFile zip = new ZipFile(thefile);
            ZipEntry entry = zip.getEntry("WEB-INF/web.xml");
            inputstream = zip.getInputStream(entry);
        } catch ( ZipException e ) {
            e.printStackTrace();
        } catch ( IOException e ) {
            e.printStackTrace();
        }
       
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputstream));
        InputSource inputSource = new InputSource(bufferedReader);
        DocumentBuilder builder = null;
        Document doc = null;
       
        DocumentBuilderFactory dom = DocumentBuilderFactory.newInstance();
        try {
            builder = dom.newDocumentBuilder();
        } catch ( ParserConfigurationException e ) {
            e.printStackTrace();
        }
       
        try {
            doc = builder.parse(inputSource);
//            doc = builder.parse(inputstream);
        } catch ( SAXException e ) {
            e.printStackTrace();
        } catch ( IOException e ) {
            e.printStackTrace();
        }
       
        if ( doc!=null ) {
            Node node = doc.getFirstChild();
            System.out.println("NamespaceURI is : "+node.getNamespaceURI());
            System.out.println("First Node Name is : "+node.getNodeName());
        } else {
            System.out.println("doc is null !!!");
        }
    }

    public static void main( String[] args ) {
        FileTest ft = new FileTest();
//        File thefile = new File( "F://onlinehome.war" );
        File thefile = new File( "F://struts-example.war" );
        ft.readXMLInZip(thefile);
    }
}
 

********************************** with dom4j *******************************************
package com.mycompany.iotest;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentFactory;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

public class FileTest {
  
    public void readXMLInZipByDom4j(File thefile){
        InputStream inputstream = null;
        try {
            ZipFile zip = new ZipFile(thefile);
            ZipEntry entry = zip.getEntry("WEB-INF/web.xml");
            inputstream = zip.getInputStream(entry);
        } catch ( ZipException e ) {
            e.printStackTrace();
        } catch ( IOException e ) {
            e.printStackTrace();
        }
      

        Document domdoc = null;
      
//        DocumentFactory docfactory = DocumentFactory.getInstance();
       
        SAXReader saxReader = new SAXReader();
//        SAXReader saxReader = new SAXReader(docfactory);
       
        try {
            domdoc = saxReader.read(inputstream);
        } catch (DocumentException e) {
            e.printStackTrace();
        }

       
      
        if ( domdoc!=null ) {
            int elenum = 1;
            Element element = domdoc.getRootElement();
System.out.println("RootElement : "+element.getName());
            List list = element.elements();
            for (Iterator it = list.iterator(); it.hasNext();) {
                Element elemt = (Element) it.next();
                System.out.println(elenum++ +" : "+ elemt.getName());
            }
        } else {
            System.out.println("domdoc is null !!!");
        }
    }

    public static void main( String[] args ) {
        FileTest ft = new FileTest();
//        File thefile = new File( "F://onlinehome.war" );
        File thefile = new File( "D://ut_web.war" );
        ft.readXMLInZipByDom4j(thefile);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值