From b402906071040dbdf240b4565b24355d9fa5c48c Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Tue, 29 Mar 2016 18:44:11 +0000 Subject: [PATCH] DumpPOIFS: Create a separate named sub-directory for each file to not overwrite each other when passing in multiple files for dumping, check for failing mkdirs() git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1737031 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/poi/poifs/dev/POIFSDump.java | 38 ++++++++++--------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/src/java/org/apache/poi/poifs/dev/POIFSDump.java b/src/java/org/apache/poi/poifs/dev/POIFSDump.java index f8c00365ac..37d2dc31e4 100644 --- a/src/java/org/apache/poi/poifs/dev/POIFSDump.java +++ b/src/java/org/apache/poi/poifs/dev/POIFSDump.java @@ -46,46 +46,48 @@ public class POIFSDump { } boolean dumpProps = false, dumpMini = false; - for (int i = 0; i < args.length; i++) { - if (args[i].equalsIgnoreCase("-dumprops") || - args[i].equalsIgnoreCase("-dump-props") || - args[i].equalsIgnoreCase("-dump-properties")) { + for (String filename : args) { + if (filename.equalsIgnoreCase("-dumprops") || + filename.equalsIgnoreCase("-dump-props") || + filename.equalsIgnoreCase("-dump-properties")) { dumpProps = true; continue; } - if (args[i].equalsIgnoreCase("-dumpmini") || - args[i].equalsIgnoreCase("-dump-mini") || - args[i].equalsIgnoreCase("-dump-ministream") || - args[i].equalsIgnoreCase("-dump-mini-stream")) { + if (filename.equalsIgnoreCase("-dumpmini") || + filename.equalsIgnoreCase("-dump-mini") || + filename.equalsIgnoreCase("-dump-ministream") || + filename.equalsIgnoreCase("-dump-mini-stream")) { dumpMini = true; continue; } - - System.out.println("Dumping " + args[i]); - FileInputStream is = new FileInputStream(args[i]); + + System.out.println("Dumping " + filename); + FileInputStream is = new FileInputStream(filename); NPOIFSFileSystem fs = new NPOIFSFileSystem(is); is.close(); DirectoryEntry root = fs.getRoot(); - File file = new File(root.getName()); - file.mkdir(); + File file = new File(new File(filename).getName(), root.getName()); + if (!file.exists() && !file.mkdirs()) { + throw new IOException("Could not create directory " + file); + } dump(root, file); - + if (dumpProps) { HeaderBlock header = fs.getHeaderBlock(); dump(fs, header.getPropertyStart(), "properties", file); } if (dumpMini) { NPropertyTable props = fs.getPropertyTable(); - int startBlock = props.getRoot().getStartBlock(); + int startBlock = props.getRoot().getStartBlock(); if (startBlock == POIFSConstants.END_OF_CHAIN) { System.err.println("No Mini Stream in file"); } else { dump(fs, startBlock, "mini-stream", file); } } - + fs.close(); } } @@ -108,7 +110,9 @@ public class POIFSDump { } else if (entry instanceof DirectoryEntry){ DirectoryEntry dir = (DirectoryEntry)entry; File file = new File(parent, entry.getName()); - file.mkdir(); + if(!file.exists() && !file.mkdirs()) { + throw new IOException("Could not create directory " + file); + } dump(dir, file); } else { System.err.println("Skipping unsupported POIFS entry: " + entry); -- 2.39.5