org.apache.poi.poifs.filesystem
Class POIFSFileSystem

java.lang.Object
  extended by org.apache.poi.poifs.filesystem.BlockStore
      extended by org.apache.poi.poifs.filesystem.NPOIFSFileSystem
          extended by org.apache.poi.poifs.filesystem.POIFSFileSystem
All Implemented Interfaces:
java.io.Closeable, POIFSViewable

public class POIFSFileSystem
extends NPOIFSFileSystem
implements POIFSViewable

Transition class for the move from POIFSFileSystem to OPOIFSFileSystem, and from NPOIFSFileSystem to POIFSFileSystem.

This has been updated to be powered by the NIO-based NPOIFS NPOIFSFileSystem.


Nested Class Summary
 
Nested classes/interfaces inherited from class org.apache.poi.poifs.filesystem.BlockStore
BlockStore.ChainLoopDetector
 
Constructor Summary
POIFSFileSystem()
          Constructor, intended for writing
POIFSFileSystem(java.io.File file)
          Creates a POIFSFileSystem from a File.
POIFSFileSystem(java.io.File file, boolean readOnly)
          Creates a POIFSFileSystem from a File.
POIFSFileSystem(java.io.InputStream stream)
          Create a POIFSFileSystem from an InputStream.
 
Method Summary
static POIFSFileSystem create(java.io.File file)
          Creates a new POIFSFileSystem in a new File.
static java.io.InputStream createNonClosingInputStream(java.io.InputStream is)
          Convenience method for clients that want to avoid the auto-close behaviour of the constructor.
static void main(java.lang.String[] args)
          read in a file and write it back out again
 
Methods inherited from class org.apache.poi.poifs.filesystem.NPOIFSFileSystem
close, createBlockIfNeeded, createDirectory, createDocument, createDocument, createDocumentInputStream, createOrUpdateDocument, getBATBlockAndIndex, getBigBlockSize, getBigBlockSizeDetails, getBlockAt, getBlockStoreBlockSize, getChainLoopDetector, getFreeBlock, getHeaderBlock, getMiniStore, getNextBlock, getPropertyTable, getRoot, getShortDescription, getViewableArray, getViewableIterator, hasPOIFSHeader, hasPOIFSHeader, isInPlaceWriteable, preferArray, setNextBlock, size, writeFilesystem, writeFilesystem
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.apache.poi.poifs.dev.POIFSViewable
getShortDescription, getViewableArray, getViewableIterator, preferArray
 

Constructor Detail

POIFSFileSystem

public POIFSFileSystem()
Constructor, intended for writing


POIFSFileSystem

public POIFSFileSystem(java.io.InputStream stream)
                throws java.io.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:
java.io.IOException - on errors reading, or on invalid data

POIFSFileSystem

public POIFSFileSystem(java.io.File file,
                       boolean readOnly)
                throws java.io.IOException

Creates a POIFSFileSystem from a File. This uses less memory than creating from an InputStream.

Note that with this constructor, you will need to call NPOIFSFileSystem.close() when you're done to have the underlying file closed, as the file is kept open during normal operation to read the data out.

Parameters:
readOnly - whether the POIFileSystem will only be used in read-only mode
file - the File from which to read the data
Throws:
java.io.IOException - on errors reading, or on invalid data

POIFSFileSystem

public POIFSFileSystem(java.io.File file)
                throws java.io.IOException

Creates a POIFSFileSystem from a File. This uses less memory than creating from an InputStream. The File will be opened read-only

Note that with this constructor, you will need to call NPOIFSFileSystem.close() when you're done to have the underlying file closed, as the file is kept open during normal operation to read the data out.

Parameters:
file - the File from which to read the data
Throws:
java.io.IOException - on errors reading, or on invalid data
Method Detail

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.


create

public static POIFSFileSystem create(java.io.File file)
                              throws java.io.IOException
Creates a new POIFSFileSystem in a new File. Use POIFSFileSystem(File) to open an existing File, this should only be used to create a new empty filesystem.

Parameters:
file - The file to create and open
Returns:
The created and opened POIFSFileSystem
Throws:
java.io.IOException

main

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