utility to dump ooxml files into file system
git-svn-id: https://svn.apache.org/repos/asf/poi/branches/ooxml@695828 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
77e9256182
commit
d0f181df99
93
src/ooxml/java/org/apache/poi/xssf/dev/XSSFDump.java
Executable file
93
src/ooxml/java/org/apache/poi/xssf/dev/XSSFDump.java
Executable file
@ -0,0 +1,93 @@
|
|||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
package org.apache.poi.xssf.dev;
|
||||||
|
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||||
|
import org.w3c.dom.Document;
|
||||||
|
|
||||||
|
import javax.xml.parsers.DocumentBuilderFactory;
|
||||||
|
import javax.xml.parsers.DocumentBuilder;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.zip.ZipFile;
|
||||||
|
import java.util.zip.ZipEntry;
|
||||||
|
import java.util.Enumeration;
|
||||||
|
|
||||||
|
import com.sun.org.apache.xml.internal.serialize.XMLSerializer;
|
||||||
|
import com.sun.org.apache.xml.internal.serialize.OutputFormat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility class which dumps the contents of a *.xlsx file into file system.
|
||||||
|
*
|
||||||
|
* @author Yegor Kozlov
|
||||||
|
*/
|
||||||
|
public class XSSFDump {
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
for (int i = 0; i < args.length; i++) {
|
||||||
|
System.out.println("Dumping " + args[i]);
|
||||||
|
ZipFile zip = new ZipFile(args[i]);
|
||||||
|
dump(zip);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void dump(ZipFile zip) throws Exception {
|
||||||
|
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
||||||
|
DocumentBuilder builder = factory.newDocumentBuilder();
|
||||||
|
|
||||||
|
String zipname = zip.getName();
|
||||||
|
int sep = zipname.lastIndexOf('.');
|
||||||
|
File root = new File(zipname.substring(0, sep));
|
||||||
|
root.mkdir();
|
||||||
|
|
||||||
|
Enumeration en = zip.entries();
|
||||||
|
while(en.hasMoreElements()){
|
||||||
|
ZipEntry entry = (ZipEntry)en.nextElement();
|
||||||
|
String name = entry.getName();
|
||||||
|
int idx = name.lastIndexOf('/');
|
||||||
|
if(idx != -1){
|
||||||
|
File bs = new File(root, name.substring(0, idx));
|
||||||
|
bs.mkdirs();
|
||||||
|
}
|
||||||
|
|
||||||
|
File f = new File(root, entry.getName());
|
||||||
|
FileOutputStream out = new FileOutputStream(f);
|
||||||
|
|
||||||
|
if(entry.getName().endsWith(".xml") || entry.getName().endsWith(".vml")){
|
||||||
|
//pass the xml through the Xerces serializer to produce nicely formatted output
|
||||||
|
Document doc = builder.parse(zip.getInputStream(entry));
|
||||||
|
|
||||||
|
OutputFormat format = new OutputFormat( doc );
|
||||||
|
format.setIndenting(true);
|
||||||
|
|
||||||
|
XMLSerializer serial = new XMLSerializer( out, format );
|
||||||
|
serial.asDOMSerializer();
|
||||||
|
serial.serialize( doc.getDocumentElement() );
|
||||||
|
|
||||||
|
} else {
|
||||||
|
int pos;
|
||||||
|
byte[] chunk = new byte[2048];
|
||||||
|
InputStream is = zip.getInputStream(entry);
|
||||||
|
while((pos = is.read(chunk)) > 0) out.write(chunk, 0, pos);
|
||||||
|
}
|
||||||
|
out.close();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user