org.apache.lucene.store

## Class FileSwitchDirectory

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

All Implemented Interfaces:
  Closeable, AutoCloseable

    public class FileSwitchDirectory
    extends Directory

Expert: A Directory instance that switches files between two other Directory instances.

Files with the specified extensions are placed in the primary directory; others are placed in the secondary directory. The provided Set must not change once passed to this class, and must allow multiple threads to call contains at once.

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

### Nested Class Summary

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

`Directory.IndexInputSlicer`

### Field Summary

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

`isOpen, lockFactory`

### Constructor Summary

Constructors
Constructor and Description
`FileSwitchDirectory(Set<String> primaryExtensions, Directory primaryDir, Directory secondaryDir, boolean doClose)`

### Method Summary

Methods
`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)` Removes an existing file in the directory.
`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.
`static String` `getExtension(String name)` Utility method to return a file's extension.
`Directory` `getPrimaryDir()` Return the primary directory
`Directory` `getSecondaryDir()` Return the secondary directory
`String[]` `listAll()` Returns an array of strings, one for each file in the directory.
`IndexInput` `openInput(String name, IOContext context)` Returns a stream reading an existing file, with the specified read buffer size.
`void` `sync(Collection<String> names)` Ensure that any writes to these files are moved to stable storage.

### Methods inherited from class org.apache.lucene.store.Directory

`clearLock, copy, ensureOpen, getLockFactory, getLockID, makeLock, setLockFactory, toString`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Constructor Detail

#### FileSwitchDirectory

    public FileSwitchDirectory(Set<String> primaryExtensions,
                       Directory primaryDir,
                       Directory secondaryDir,
                       boolean doClose)

### Method Detail

#### getPrimaryDir

    public Directory getPrimaryDir()

Return the primary directory

#### getSecondaryDir

    public Directory getSecondaryDir()

Return the secondary directory

#### 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`

#### listAll

    public String[] listAll()
                     throws IOException

Description copied from class: `Directory`
Returns an array of strings, one for each file in the directory.

Specified by:
  `listAll` in class `Directory`
Throws:
  `NoSuchDirectoryException` - if the directory is not prepared for any write operations (such as `Directory.createOutput(String, IOContext)`).
  `IOException` - in case of other IO errors

#### getExtension

    public static String getExtension(String name)

Utility method to return a file's extension.

#### fileExists

    public boolean fileExists(String name)
                       throws IOException

Description copied from class: `Directory`
Returns true iff a file with the given name exists.

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

#### deleteFile

    public void deleteFile(String name)
                    throws IOException

Description copied from class: `Directory`
Removes an existing file in the directory.

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

#### fileLength

    public long fileLength(String name)
                    throws IOException

Description copied from class: `Directory`
Returns the length of a file in the directory. This method follows the following contract:

- Throws `FileNotFoundException` if the file does not exist
- Returns a value ≥0 if the file exists, which specifies its length.

Specified by:
  `fileLength` in class `Directory`
Parameters:
  `name` - the name of the file for which to return the length.
Throws:
  `FileNotFoundException` - if the file does not exist.
  `IOException` - if there was an IO error while retrieving the file's length.

#### 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)
              throws IOException

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`
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`

#### 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