## org.apache.lucene.store
Class CompoundFileDirectory

    java.lang.Object
      org.apache.lucene.store.Directory
          org.apache.lucene.store.CompoundFileDirectory

All Implemented Interfaces:
  Closeable

    public final class CompoundFileDirectory

extends Directory

Class for accessing a compound stream. This class implements a directory, but is limited to only read operations. Directory methods that would normally modify data throw an exception.

All files belonging to a segment have the same name with varying extensions. The extensions correspond to the different file formats used by the `Codec`. When using the Compound File format these files are collapsed into a single `.cfs` file (except for the `LiveDocsFormat`, with a corresponding `.cfe` file indexing its sub-files.

Files:

- `.cfs`: An optional "virtual" file consisting of all the other index files for systems that frequently run out of file handles.
- `.cfe`: The "virtual" compound file's entry table holding all entries in the corresponding .cfs file.

Description:

- Compound (.cfs) --> Header, FileData FileCount
- Compound Entry Table (.cfe) --> Header, FileCount, <FileName, DataOffset, DataLength> FileCount
- Header --> `CodecHeader`
- FileCount --> `VInt`
- DataOffset,DataLength --> `UInt64`
- FileName --> `String`
- FileData --> raw file data

Notes:

- FileCount indicates how many files are contained in this compound file. The entry table that follows has that many entries.
- Each directory entry contains a long pointer to the start of this file's data section, the files length, and a String with that file's name.

WARNING: This API is experimental and might change in incompatible ways in the next release.

Nested Class Summary
`static class` `CompoundFileDirectory.FileEntry` Offset/Length for a slice inside of a compound file

Nested classes/interfaces inherited from class org.apache.lucene.store.Directory
`Directory.IndexInputSlicer`

Field Summary
`protected int` `readBufferSize`

Fields inherited from class org.apache.lucene.store.Directory
`isOpen, lockFactory`

Constructor Summary
`CompoundFileDirectory(Directory directory, String fileName, IOContext context, boolean openForWrite)` Create a new CompoundFileDirectory.

Method Summary
`void` `close()` Closes the store.
`IndexOutput` `createOutput(String name, IOContext context)` Creates a new, empty file in the directory with the given name.
`Directory.IndexInputSlicer` `createSlicer(String name, IOContext context)` Creates an `Directory.IndexInputSlicer` for the given file name.
`void` `deleteFile(String name)` Not implemented
`boolean` `fileExists(String name)` Returns true iff a file with the given name exists.
`long` `fileLength(String name)` Returns the length of a file in the directory.
`Directory` `getDirectory()`
`String` `getName()`
`String[]` `listAll()` Returns an array of strings, one for each file in the directory.
`Lock` `makeLock(String name)` Not implemented
`IndexInput` `openInput(String name, IOContext context)` Returns a stream reading an existing file, with the specified read buffer size.
`void` `renameFile(String from, String to)` Not implemented
`void` `sync(Collection<String> names)` Ensure that any writes to these files are moved to stable storage.
`String` `toString()`

Methods inherited from class org.apache.lucene.store.Directory
`clearLock, copy, ensureOpen, getLockFactory, getLockID, setLockFactory`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

Field Detail

### readBufferSize

    protected final int readBufferSize

Constructor Detail

### CompoundFileDirectory

    public CompoundFileDirectory(Directory directory,
                                 String fileName,
                                 IOContext context,
                                 boolean openForWrite)
                          throws IOException

  Create a new CompoundFileDirectory.

  Throws:
    `IOException`

Method Detail

### getDirectory

    public Directory getDirectory()

### getName

    public String getName()

### close

    public void close()
               throws IOException

  Description copied from class: `Directory`
  Closes the store.

  Specified by:
    `close` in interface `Closeable`
  Specified by:
    `close` in class `Directory`
  Throws:
    `IOException`

### openInput

    public IndexInput openInput(String name,
                                IOContext context)
                         throws IOException

  Description copied from class: `Directory`
  Returns a stream reading an existing file, with the specified read buffer size. The particular Directory implementation may ignore the buffer size. Currently the only Directory implementations that respect this parameter are `FSDirectory` and `CompoundFileDirectory`.

  Specified by:
    `openInput` in class `Directory`
  Throws:
    `IOException`

### listAll

    public String[] listAll()

  Returns an array of strings, one for each file in the directory.

  Specified by:
    `listAll` in class `Directory`

### fileExists

    public boolean fileExists(String name)

  Returns true iff a file with the given name exists.

  Specified by:
    `fileExists` in class `Directory`

### deleteFile

    public void deleteFile(String name)

  Not implemented

  Specified by:
    `deleteFile` in class `Directory`
  Throws:
    `UnsupportedOperationException` - always: not supported by CFS

### renameFile

    public void renameFile(String from,
                           String to)

  Not implemented

  Throws:
    `UnsupportedOperationException` - always: not supported by CFS

### fileLength

    public long fileLength(String name)
                    throws IOException

  Returns the length of a file in the directory.

  Specified by:
    `fileLength` in class `Directory`
  Parameters:
    `name` - the name of the file for which to return the length.
  Throws:
    `IOException` - if the file does not exist

### createOutput

    public IndexOutput createOutput(String name,
                                    IOContext context)
                             throws IOException

  Description copied from class: `Directory`
  Creates a new, empty file in the directory with the given name. Returns a stream writing this file.

  Specified by:
    `createOutput` in class `Directory`
  Throws:
    `IOException`

### sync

    public void sync(Collection<String> names)

  Description copied from class: `Directory`
  Ensure that any writes to these files are moved to stable storage. Lucene uses this to properly commit changes to the index, to prevent a machine/OS crash from corrupting the index.
  NOTE: Clients may call this method for same files over and over again, so some impls might optimize for that. For other impls the operation can be a noop, for various reasons.

  Specified by:
    `sync` in class `Directory`

### makeLock

    public Lock makeLock(String name)

  Not implemented

  Overrides:
    `makeLock` in class `Directory`
  Parameters:
    `name` - the name of the lock file
  Throws:
    `UnsupportedOperationException` - always: not supported by CFS

### createSlicer

    public Directory.IndexInputSlicer createSlicer(String name,
                                                   IOContext context)
                                            throws IOException

  Description copied from class: `Directory`
  Creates an `Directory.IndexInputSlicer` for the given file name. IndexInputSlicer allows other `Directory` implementations to efficiently open one or more sliced `IndexInput` instances from a single file handle. The underlying file handle is kept open until the `Directory.IndexInputSlicer` is closed.

  Overrides:
    `createSlicer` in class `Directory`
  Throws:
    `IOException` - if an `IOException` occurs

### toString

    public String toString()

  Overrides:
    `toString` in class `Directory`

Copyright © 2000-2013 Apache Software Foundation. All Rights Reserved.