<strong>property set stream</strong>.</p>
<p>This document describes the internal structure of a property set stream,
- i.e. the <strong>Horrible Property Set Format (HWPF)</strong>. It does not
- describe how a Microsoft Office document is organized internally and how
- to retrieve a stream from it. See the <link
+ i.e. the <strong>Horrible Property Set Format (HPSF)</strong>. It does
+ not describe how a Microsoft Office document is organized internally and
+ how to retrieve a stream from it. See the <link
href="../poifs/index.html">POIFS documentation</link> for that kind of
stuff.</p>
<td>Denotes the operating system and the OS version under which this
stream was created. The operating system ID is in the DWord's higher
word (after little endian decoding): <code>0x0000</code> for Win16,
- <code>0x0001</code> for Macintosh and <code>0x0002</code> for Win32 - that's
- all. The reader is most likely aware of the fact that there are some
- more operating systems. However, Microsoft does not seem to know.</td>
+ <code>0x0001</code> for Macintosh and <code>0x0002</code> for Win32 -
+ that's all. The reader is most likely aware of the fact that there are
+ some more operating systems. However, Microsoft does not seem to
+ know.</td>
<td></td>
</tr>
import java.util.List;
import java.util.Properties;
+import org.apache.poi.hpsf.MarkUnsupportedException;
+import org.apache.poi.hpsf.NoPropertySetStreamException;
+import org.apache.poi.hpsf.PropertySet;
+import org.apache.poi.hpsf.PropertySetFactory;
+import org.apache.poi.hpsf.UnexpectedPropertySetTypeException;
import org.apache.poi.poifs.eventfilesystem.POIFSReader;
import org.apache.poi.poifs.eventfilesystem.POIFSReaderEvent;
import org.apache.poi.poifs.eventfilesystem.POIFSReaderListener;
{
try
{
- POIFile f = new POIFile();
+ final POIFile f = new POIFile();
f.setName(event.getName());
f.setPath(event.getPath());
- InputStream in = event.getStream();
- ByteArrayOutputStream out = new ByteArrayOutputStream();
+ final InputStream in = event.getStream();
+ final ByteArrayOutputStream out = new ByteArrayOutputStream();
Util.copy(in, out);
out.close();
f.setBytes(out.toByteArray());
+ /**
+ * <p>Read all files from a POI filesystem which are property set streams
+ * and returns them as an array of {@link org.apache.poi.hpsf.PropertySet}
+ * instances.</p>
+ *
+ * @param poiFs The name of the POI filesystem as seen by the
+ * operating system. (This is the "filename".)
+ *
+ * @return The property sets. The elements are ordered in the same way
+ * as the files in the POI filesystem.
+ *
+ * @exception FileNotFoundException if the file containing the POI
+ * filesystem does not exist
+ *
+ * @exception IOException if an I/O exception occurs
+ */
+ public static POIFile[] readPropertySets(final File poiFs)
+ throws FileNotFoundException, IOException
+ {
+ final List files = new ArrayList(7);
+ final POIFSReader r = new POIFSReader();
+ POIFSReaderListener pfl = new POIFSReaderListener()
+ {
+ public void processPOIFSReaderEvent(final POIFSReaderEvent event)
+ {
+ try
+ {
+ final POIFile f = new POIFile();
+ f.setName(event.getName());
+ f.setPath(event.getPath());
+ final InputStream in = event.getStream();
+ if (PropertySet.isPropertySetStream(in))
+ {
+ final ByteArrayOutputStream out =
+ new ByteArrayOutputStream();
+ Util.copy(in, out);
+ out.close();
+ f.setBytes(out.toByteArray());
+ files.add(f);
+ }
+ }
+ catch (Exception ex)
+ {
+ ex.printStackTrace();
+ throw new RuntimeException(ex.getMessage());
+ }
+ }
+ };
+
+ /* Register the listener for all POI files. */
+ r.registerListener(pfl);
+
+ /* Read the POI filesystem. */
+ r.read(new FileInputStream(poiFs));
+ POIFile[] result = new POIFile[files.size()];
+ for (int i = 0; i < result.length; i++)
+ result[i] = (POIFile) files.get(i);
+ return result;
+ }
+
+
+
/**
* <p>Prints the system properties to System.out.</p>
*/