package org.apache.poi.poifs.dev;
+import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Iterator;
import org.apache.poi.poifs.filesystem.DirectoryNode;
import org.apache.poi.poifs.filesystem.DocumentNode;
+import org.apache.poi.poifs.filesystem.Entry;
+import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
/**
* Much simpler than {@link POIFSViewer}
*/
public class POIFSLister {
- /**
- * Display the entries of multiple POIFS files
- *
- * @param args the names of the files to be displayed
- */
- public static void main(final String args[]) throws IOException {
- if (args.length == 0) {
- System.err.println("Must specify at least one file to view");
- System.exit(1);
- }
+ /**
+ * Display the entries of multiple POIFS files
+ *
+ * @param args the names of the files to be displayed
+ */
+ public static void main(final String args[]) throws IOException {
+ if (args.length == 0) {
+ System.err.println("Must specify at least one file to view");
+ System.exit(1);
+ }
- boolean withSizes = false;
- for (int j = 0; j < args.length; j++) {
- if (args[j].equalsIgnoreCase("-size") || args[j].equalsIgnoreCase("-sizes")) {
- withSizes = true;
- } else {
- viewFile(args[j], withSizes);
- }
- }
- }
+ boolean withSizes = false;
+ boolean newPOIFS = true;
+ for (int j = 0; j < args.length; j++) {
+ if (args[j].equalsIgnoreCase("-size") || args[j].equalsIgnoreCase("-sizes")) {
+ withSizes = true;
+ } else if (args[j].equalsIgnoreCase("-old") || args[j].equalsIgnoreCase("-old-poifs")) {
+ newPOIFS = false;
+ } else {
+ if(newPOIFS) {
+ viewFile(args[j], withSizes);
+ } else {
+ viewFileOld(args[j], withSizes);
+ }
+ }
+ }
+ }
- public static void viewFile(final String filename, boolean withSizes) throws IOException {
- POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(filename));
- displayDirectory(fs.getRoot(), "", withSizes);
- }
+ public static void viewFile(final String filename, boolean withSizes) throws IOException {
+ NPOIFSFileSystem fs = new NPOIFSFileSystem(new File(filename));
+ displayDirectory(fs.getRoot(), "", withSizes);
+ }
- public static void displayDirectory(DirectoryNode dir, String indent, boolean withSizes) {
- System.out.println(indent + dir.getName() + " -");
- String newIndent = indent + " ";
+ public static void viewFileOld(final String filename, boolean withSizes) throws IOException {
+ POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(filename));
+ displayDirectory(fs.getRoot(), "", withSizes);
+ }
- boolean hadChildren = false;
- for (Iterator it = dir.getEntries(); it.hasNext();) {
- hadChildren = true;
- Object entry = it.next();
- if (entry instanceof DirectoryNode) {
- displayDirectory((DirectoryNode) entry, newIndent, withSizes);
- } else {
- DocumentNode doc = (DocumentNode) entry;
- String name = doc.getName();
- String size = "";
- if (name.charAt(0) < 10) {
- String altname = "(0x0" + (int) name.charAt(0) + ")" + name.substring(1);
- name = name.substring(1) + " <" + altname + ">";
- }
- if (withSizes) {
- size = " [" + doc.getSize() + " / 0x" + Integer.toHexString(doc.getSize())
- + "]";
- }
- System.out.println(newIndent + name + size);
- }
- }
- if (!hadChildren) {
- System.out.println(newIndent + "(no children)");
- }
- }
+ public static void displayDirectory(DirectoryNode dir, String indent, boolean withSizes) {
+ System.out.println(indent + dir.getName() + " -");
+ String newIndent = indent + " ";
+
+ boolean hadChildren = false;
+ for(Iterator<Entry> it = dir.getEntries(); it.hasNext();) {
+ hadChildren = true;
+ Entry entry = it.next();
+ if (entry instanceof DirectoryNode) {
+ displayDirectory((DirectoryNode) entry, newIndent, withSizes);
+ } else {
+ DocumentNode doc = (DocumentNode) entry;
+ String name = doc.getName();
+ String size = "";
+ if (name.charAt(0) < 10) {
+ String altname = "(0x0" + (int) name.charAt(0) + ")" + name.substring(1);
+ name = name.substring(1) + " <" + altname + ">";
+ }
+ if (withSizes) {
+ size = " [" + doc.getSize() + " / 0x" +
+ Integer.toHexString(doc.getSize()) + "]";
+ }
+ System.out.println(newIndent + name + size);
+ }
+ }
+ if (!hadChildren) {
+ System.out.println(newIndent + "(no children)");
+ }
+ }
}