Class POIFSFileSystem

All Implemented Interfaces:
Closeable, AutoCloseable, POIFSViewable

public class POIFSFileSystem extends NPOIFSFileSystem implements POIFSViewable
Transition class for the move from POIFSFileSystem to OPOIFSFileSystem, and from NPOIFSFileSystem to POIFSFileSystem. Currently, this is OPOIFS-powered
  • Constructor Details

    • POIFSFileSystem

      public POIFSFileSystem()
      Constructor, intended for writing
    • POIFSFileSystem

      public POIFSFileSystem(InputStream stream) throws IOException
      Create a POIFSFileSystem 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 return true for 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 = POIFSFileSystem.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:
      IOException - on errors reading, or on invalid data
  • Method Details

    • createNonClosingInputStream

      public static InputStream createNonClosingInputStream(InputStream is)
      Convenience method for clients that want to avoid the auto-close behaviour of the constructor.
    • hasPOIFSHeader

      public static boolean hasPOIFSHeader(InputStream inp) throws IOException
      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. 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:
      IOException
    • hasPOIFSHeader

      public static boolean hasPOIFSHeader(byte[] header8Bytes)
      Checks if the supplied first 8 bytes of a stream / file has a POIFS (OLE2) header.
    • main

      public static void main(String[] args) throws IOException
      read 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:
      IOException