Class OPOIFSFileSystem
java.lang.Object
org.docx4j.org.apache.poi.poifs.filesystem.OPOIFSFileSystem
- All Implemented Interfaces:
POIFSViewable
public class OPOIFSFileSystem extends java.lang.Object implements POIFSViewable
This is the main class of the POIFS system; it manages the entire life cycle of the filesystem.
This is the older version, which uses more memory, and doesn't support in-place writes.
-
Constructor Summary
Constructors Constructor Description OPOIFSFileSystem()Constructor, intended for writingOPOIFSFileSystem(java.io.InputStream stream)Create a OPOIFSFileSystem from an InputStream. -
Method Summary
Modifier and Type Method Description protected voidcloseInputStream(java.io.InputStream stream, boolean success)DirectoryEntrycreateDirectory(java.lang.String name)create a new DirectoryEntry in the root directoryDocumentEntrycreateDocument(java.io.InputStream stream, java.lang.String name)Create a new document to be added to the root directoryDocumentEntrycreateDocument(java.lang.String name, int size, POIFSWriterListener writer)create a new DocumentEntry in the root entry; the data will be provided laterDocumentInputStreamcreateDocumentInputStream(java.lang.String documentName)open a document in the root entry's list of entriesstatic java.io.InputStreamcreateNonClosingInputStream(java.io.InputStream is)Convenience method for clients that want to avoid the auto-close behaviour of the constructor.intgetBigBlockSize()POIFSBigBlockSizegetBigBlockSizeDetails()DirectoryNodegetRoot()get the root entryjava.lang.StringgetShortDescription()Provides a short description of the object, to be used when a POIFSViewable object has not provided its contents.java.lang.Object[]getViewableArray()Get an array of objects, some of which may implement POIFSViewablejava.util.Iterator<java.lang.Object>getViewableIterator()Get an Iterator of objects, some of which may implement POIFSViewablestatic booleanhasPOIFSHeader(byte[] header8Bytes)Checks if the supplied first 8 bytes of a stream / file has a POIFS (OLE2) header.static booleanhasPOIFSHeader(java.io.InputStream inp)Checks that the supplied InputStream (which MUST support mark and reset, or be a PushbackInputStream) has a POIFS (OLE2) header at the start of it.static voidmain(java.lang.String[] args)read in a file and write it back out againbooleanpreferArray()Give viewers a hint as to whether to call getViewableArray or getViewableIteratorvoidwriteFilesystem(java.io.OutputStream stream)Write the filesystem out
-
Constructor Details
-
OPOIFSFileSystem
public OPOIFSFileSystem()Constructor, intended for writing -
OPOIFSFileSystem
public OPOIFSFileSystem(java.io.InputStream stream) throws java.io.IOExceptionCreate a OPOIFSFileSystem from an InputStream. Normally the stream is read until EOF. The stream is always closed. Some streams are usable after reaching EOF (typically those that returntruefor markSupported()). In the unlikely case that the caller has such a stream and needs to use it after this constructor completes, a work around is to wrap the stream in order to trap the close() call. A convenience method ( createNonClosingInputStream()) has been provided for this purpose:InputStream wrappedStream = OPOIFSFileSystem.createNonClosingInputStream(is); HSSFWorkbook wb = new HSSFWorkbook(wrappedStream); is.reset(); doSomethingElse(is);
Note also the special case of ByteArrayInputStream for which the close() method does nothing.ByteArrayInputStream bais = ... HSSFWorkbook wb = new HSSFWorkbook(bais); // calls bais.close() ! bais.reset(); // no problem doSomethingElse(bais);
- Parameters:
stream- the InputStream from which to read the data- Throws:
java.io.IOException- on errors reading, or on invalid data
-
-
Method Details
-
createNonClosingInputStream
public static java.io.InputStream createNonClosingInputStream(java.io.InputStream is)Convenience method for clients that want to avoid the auto-close behaviour of the constructor. -
closeInputStream
protected void closeInputStream(java.io.InputStream stream, boolean success)- Parameters:
stream- the stream to be closedsuccess-falseif an exception is currently being thrown in the calling method
-
hasPOIFSHeader
public static boolean hasPOIFSHeader(java.io.InputStream inp) throws java.io.IOExceptionChecks that the supplied InputStream (which MUST support mark and reset, or be a PushbackInputStream) has a POIFS (OLE2) header at the start of it. If your InputStream does not support mark / reset, then wrap it in a PushBackInputStream, then be sure to always use that, and not the original!- Parameters:
inp- An InputStream which supports either mark/reset, or is a PushbackInputStream- Throws:
java.io.IOException
-
hasPOIFSHeader
public static boolean hasPOIFSHeader(byte[] header8Bytes)Checks if the supplied first 8 bytes of a stream / file has a POIFS (OLE2) header. -
createDocument
public DocumentEntry createDocument(java.io.InputStream stream, java.lang.String name) throws java.io.IOExceptionCreate a new document to be added to the root directory- Parameters:
stream- the InputStream from which the document's data will be obtainedname- the name of the new POIFSDocument- Returns:
- the new DocumentEntry
- Throws:
java.io.IOException- on error creating the new POIFSDocument
-
createDocument
public DocumentEntry createDocument(java.lang.String name, int size, POIFSWriterListener writer) throws java.io.IOExceptioncreate a new DocumentEntry in the root entry; the data will be provided later- Parameters:
name- the name of the new DocumentEntrysize- the size of the new DocumentEntrywriter- the writer of the new DocumentEntry- Returns:
- the new DocumentEntry
- Throws:
java.io.IOException
-
createDirectory
create a new DirectoryEntry in the root directory- Parameters:
name- the name of the new DirectoryEntry- Returns:
- the new DirectoryEntry
- Throws:
java.io.IOException- on name duplication
-
writeFilesystem
public void writeFilesystem(java.io.OutputStream stream) throws java.io.IOExceptionWrite the filesystem out- Parameters:
stream- the OutputStream to which the filesystem will be written- Throws:
java.io.IOException- thrown on errors writing to the stream
-
main
public static void main(java.lang.String[] args) throws java.io.IOExceptionread in a file and write it back out again- Parameters:
args- names of the files; arg[ 0 ] is the input file, arg[ 1 ] is the output file- Throws:
java.io.IOException
-
getRoot
get the root entry- Returns:
- the root entry
-
createDocumentInputStream
public DocumentInputStream createDocumentInputStream(java.lang.String documentName) throws java.io.IOExceptionopen a document in the root entry's list of entries- Parameters:
documentName- the name of the document to be opened- Returns:
- a newly opened DocumentInputStream
- Throws:
java.io.IOException- if the document does not exist or the name is that of a DirectoryEntry
-
getViewableArray
public java.lang.Object[] getViewableArray()Get an array of objects, some of which may implement POIFSViewable- Specified by:
getViewableArrayin interfacePOIFSViewable- Returns:
- an array of Object; may not be null, but may be empty
-
getViewableIterator
public java.util.Iterator<java.lang.Object> getViewableIterator()Get an Iterator of objects, some of which may implement POIFSViewable- Specified by:
getViewableIteratorin interfacePOIFSViewable- Returns:
- an Iterator; may not be null, but may have an empty back end store
-
preferArray
public boolean preferArray()Give viewers a hint as to whether to call getViewableArray or getViewableIterator- Specified by:
preferArrayin interfacePOIFSViewable- Returns:
- true if a viewer should call getViewableArray, false if a viewer should call getViewableIterator
-
getShortDescription
public java.lang.String getShortDescription()Provides a short description of the object, to be used when a POIFSViewable object has not provided its contents.- Specified by:
getShortDescriptionin interfacePOIFSViewable- Returns:
- short description
-
getBigBlockSize
public int getBigBlockSize()- Returns:
- The Big Block size, normally 512 bytes, sometimes 4096 bytes
-
getBigBlockSizeDetails
- Returns:
- The Big Block size, normally 512 bytes, sometimes 4096 bytes
-