*** empty log message ***

git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353291 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Rainer Klute 2003-08-05 20:52:25 +00:00
parent 4cd47db1b4
commit 53621f0c8c
2 changed files with 77 additions and 9 deletions

View File

@ -32,9 +32,9 @@
<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>
@ -172,9 +172,10 @@
<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>

View File

@ -69,6 +69,11 @@ import java.util.LinkedList;
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;
@ -177,11 +182,11 @@ public class Util
{
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());
@ -213,6 +218,68 @@ public class Util
/**
* <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>
*/