From 53621f0c8c369adab1493cefdb98adc33dfe6987 Mon Sep 17 00:00:00 2001
From: Rainer Klute
This document describes the internal structure of a property set stream, - i.e. the Horrible Property Set Format (HWPF). It does not - describe how a Microsoft Office document is organized internally and how - to retrieve a stream from it. See the Horrible Property Set Format (HPSF). It does + not describe how a Microsoft Office document is organized internally and + how to retrieve a stream from it. See the POIFS documentation for that kind of stuff.
@@ -172,9 +172,10 @@0x0000
for Win16,
- 0x0001
for Macintosh and 0x0002
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.0x0001
for Macintosh and 0x0002
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.
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.
+ * + * @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; + } + + + /** *Prints the system properties to System.out.
*/