From 5ed63966c4a377e2b7ea239f100f5ab7d130e2be Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Tue, 28 Dec 2010 07:13:47 +0000 Subject: [PATCH] Allow POIFSLister to switch between the two different POIFS implementations when listing git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1053274 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/poi/poifs/dev/POIFSLister.java | 117 ++++++++++-------- 1 file changed, 66 insertions(+), 51 deletions(-) diff --git a/src/java/org/apache/poi/poifs/dev/POIFSLister.java b/src/java/org/apache/poi/poifs/dev/POIFSLister.java index 691df5a04..357773a63 100644 --- a/src/java/org/apache/poi/poifs/dev/POIFSLister.java +++ b/src/java/org/apache/poi/poifs/dev/POIFSLister.java @@ -17,12 +17,15 @@ 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; /** @@ -31,59 +34,71 @@ 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 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)"); + } + } }