org.apache.lucene.store

## Class CompoundFileDirectory

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

- All Implemented Interfaces:
    Closeable, AutoCloseable

      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

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `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

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected int` | `readBufferSize`

    - ### Fields inherited from class org.apache.lucene.store.Directory

      `isOpen, lockFactory`

  - ### Constructor Summary

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

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `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 interface `AutoCloseable`
      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.