NIOFSDirectory (Lucene 10.5.0 core API)
Description: declaration: package: org.apache.lucene.store, class: NIOFSDirectory

Package org.apache.lucene.store

# Class NIOFSDirectory

java.lang.Object
org.apache.lucene.store.Directory
org.apache.lucene.store.BaseDirectory
org.apache.lucene.store.FSDirectory
org.apache.lucene.store.NIOFSDirectory

All Implemented Interfaces:
  `Closeable`, `AutoCloseable`

public class NIOFSDirectory extends FSDirectory
An `FSDirectory` implementation that uses java.nio's FileChannel's positional read, which allows multiple threads to read from the same file without synchronizing.

This class only uses FileChannel when reading; writing is achieved with `FSDirectory.FSIndexOutput`.

NOTE: NIOFSDirectory is not recommended on Windows because of a bug in how FileChannel.read is implemented in Sun's JRE. Inside of the implementation the position is apparently synchronized. See here for details.

NOTE: Accessing this class either directly or indirectly from a thread while it's interrupted can close the underlying file descriptor immediately if at the same time the thread is blocked on IO. The file descriptor will remain closed and subsequent access to `NIOFSDirectory` will throw a `ClosedChannelException`. If your application uses either `Thread.interrupt()` or `Future.cancel(boolean)` you should use the legacy `RAFDirectory` from the Lucene `misc` module in favor of `NIOFSDirectory`.

- ## Field Summary

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

  `directory`

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

  `isOpen, lockFactory`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `NIOFSDirectory(Path path)`
  Create a new NIOFSDirectory for the named location and `FSLockFactory.getDefault()`.
  `NIOFSDirectory(Path path, LockFactory lockFactory)`
  Create a new NIOFSDirectory for the named location.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `IndexInput`
  `openInput(String name, IOContext context)`
  Opens a stream for reading an existing file.

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

  `close, createOutput, createTempOutput, deleteFile, deletePendingFiles, ensureCanRead, fileLength, fsync, getDirectory, getPendingDeletions, listAll, listAll, open, open, rename, sync, syncMetaData, toString`

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

  `ensureOpen, obtainLock`

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

  `copyFrom, getTempFileName, openChecksumInput`

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

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

- ## Constructor Details

  - ### NIOFSDirectory

    public NIOFSDirectory(Path path, LockFactory lockFactory) throws IOException
    Create a new NIOFSDirectory for the named location. The directory is created at the named location if it does not yet exist.
    Parameters:
      `path` - the path of the directory
      `lockFactory` - the lock factory to use
    Throws:
      `IOException` - if there is a low-level I/O error

  - ### NIOFSDirectory

    public NIOFSDirectory(Path path) throws IOException
    Create a new NIOFSDirectory for the named location and `FSLockFactory.getDefault()`. The directory is created at the named location if it does not yet exist.
    Parameters:
      `path` - the path of the directory
    Throws:
      `IOException` - if there is a low-level I/O error

- ## Method Details

  - ### openInput

    public IndexInput openInput(String name, IOContext context) throws IOException
    Description copied from class: `Directory`
    Opens a stream for reading an existing file.

    This method must throw either `NoSuchFileException` or `FileNotFoundException` if `name` points to a non-existing file.

    Specified by:
      `openInput` in class `Directory`
    Parameters:
      `name` - the name of an existing file.
    Throws:
      `IOException` - in case of I/O error