Package org.eclipse.rdf4j.common.io

## Class NioFile

- java.lang.Object
- - org.eclipse.rdf4j.common.io.NioFile

- All Implemented Interfaces:
    `Closeable`, `AutoCloseable`

      public final class NioFile
      extends Object
      implements Closeable

  File wrapper that protects against concurrent file closing events due to e.g. `thread interrupts`. In case the file channel that is used by this class is closed due to such an event, it will try to reopen the channel. The thread that causes the `ClosedByInterruptException` is not protected, assuming the interrupt is intended to end the thread's operation.
  Author:
    Arjohn Kampman

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `NioFile​(File file)` | Constructor Opens a file in read/write mode, creating a new one if the file doesn't exist.
    `NioFile​(File file, String mode)` | Constructor Opens a file in a specific mode, creating a new one if the file doesn't exist.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `close()` |
    `boolean` | `delete()` | Close any open channels and then deletes the file.
    `void` | `force​(boolean metaData)` | Performs a protected `FileChannel.force(boolean)` call.
    `File` | `getFile()` |
    `boolean` | `isClosed()` | Check if a file was closed explicitly.
    `int` | `read​(ByteBuffer buf, long offset)` | Performs a protected `FileChannel.read(ByteBuffer, long)` call.
    `byte` | `readByte​(long offset)` | Read single byte from channel starting at offset.
    `byte[]` | `readBytes​(long offset, int length)` | Read a byte array of a specific length from channel starting at offset.
    `int` | `readInt​(long offset)` | Read integer value from channel starting at offset.
    `long` | `readLong​(long offset)` | Read long value from channel starting at offset.
    `long` | `size()` | Performs a protected `FileChannel.size()` call.
    `long` | `transferTo​(long position, long count, WritableByteChannel target)` | Performs a protected `FileChannel.transferTo(long, long, WritableByteChannel)` call.
    `void` | `truncate​(long size)` | Performs a protected `FileChannel.truncate(long)` call.
    `int` | `write​(ByteBuffer buf, long offset)` | Performs a protected `FileChannel.write(ByteBuffer, long)` call.
    `void` | `writeByte​(byte value, long offset)` | Write single byte to channel starting at offset.
    `void` | `writeBytes​(byte[] value, long offset)` | Write byte array to channel starting at offset.
    `void` | `writeInt​(int value, long offset)` | Write integer value to channel starting at offset.
    `void` | `writeLong​(long value, long offset)` | Write long value to channel starting at offset.

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

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

- - ### Constructor Detail

    - #### NioFile

          public NioFile​(File file)
                  throws IOException

      Constructor Opens a file in read/write mode, creating a new one if the file doesn't exist.
      Parameters:
        `file` -
      Throws:
        `IOException`

    - #### NioFile

          public NioFile​(File file,
                         String mode)
                  throws IOException

      Constructor Opens a file in a specific mode, creating a new one if the file doesn't exist.
      Parameters:
        `file` - file
        `mode` - file mode
      Throws:
        `IOException`

  - ### Method Detail

    - #### close

          public void close()
                     throws IOException

      Specified by:
        `close` in interface `AutoCloseable`
      Specified by:
        `close` in interface `Closeable`
      Throws:
        `IOException`

    - #### isClosed

          public boolean isClosed()

      Check if a file was closed explicitly.
      Returns:
        true if it was closed explicitly

    - #### getFile

          public File getFile()

    - #### delete

          public boolean delete()
                         throws IOException

      Close any open channels and then deletes the file.
      Returns:
        true if the file has been deleted successfully, false otherwise.
      Throws:
        `IOException` - If there was a problem closing the open file channel.

    - #### force

          public void force​(boolean metaData)
                     throws IOException

      Performs a protected `FileChannel.force(boolean)` call.
      Parameters:
        `metaData` -
      Throws:
        `IOException`

    - #### truncate

          public void truncate​(long size)
                        throws IOException

      Performs a protected `FileChannel.truncate(long)` call.
      Parameters:
        `size` -
      Throws:
        `IOException`

    - #### size

          public long size()
                    throws IOException

      Performs a protected `FileChannel.size()` call.
      Returns:
        size of the file
      Throws:
        `IOException`

    - #### transferTo

          public long transferTo​(long position,
                                 long count,
                                 WritableByteChannel target)
                          throws IOException

      Performs a protected `FileChannel.transferTo(long, long, WritableByteChannel)` call.
      Parameters:
        `position` - position within the file
        `count` - number of bytes to transfer
        `target` - target channel
      Returns:
        number of bytes transferred
      Throws:
        `IOException`

    - #### write

          public int write​(ByteBuffer buf,
                           long offset)
                    throws IOException

      Performs a protected `FileChannel.write(ByteBuffer, long)` call.
      Parameters:
        `buf` - buffer
        `offset` - non-negative offset
      Returns:
        number of bytes written
      Throws:
        `IOException`

    - #### read

          public int read​(ByteBuffer buf,
                          long offset)
                   throws IOException

      Performs a protected `FileChannel.read(ByteBuffer, long)` call.
      Parameters:
        `buf` - buffer to read
        `offset` - non-negative offset
      Returns:
        number of bytes read
      Throws:
        `IOException`

    - #### writeBytes

          public void writeBytes​(byte[] value,
                                 long offset)
                          throws IOException

      Write byte array to channel starting at offset.
      Parameters:
        `value` - byte array to write
        `offset` - non-negative offset
      Throws:
        `IOException`

    - #### readBytes

          public byte[] readBytes​(long offset,
                                  int length)
                           throws IOException

      Read a byte array of a specific length from channel starting at offset.
      Parameters:
        `offset` -
        `length` -
      Returns:
        byte array
      Throws:
        `IOException`

    - #### writeByte

          public void writeByte​(byte value,
                                long offset)
                         throws IOException

      Write single byte to channel starting at offset.
      Parameters:
        `value` - value to write
        `offset` - non-negative offset
      Throws:
        `IOException`

    - #### readByte

          public byte readByte​(long offset)
                        throws IOException

      Read single byte from channel starting at offset.
      Parameters:
        `offset` - non-negative offset
      Returns:
        byte
      Throws:
        `IOException`

    - #### writeLong

          public void writeLong​(long value,
                                long offset)
                         throws IOException

      Write long value to channel starting at offset.
      Parameters:
        `value` - value to write
        `offset` - non-negative offset
      Throws:
        `IOException`

    - #### readLong

          public long readLong​(long offset)
                        throws IOException

      Read long value from channel starting at offset.
      Parameters:
        `offset` - non-negative offset
      Returns:
        long
      Throws:
        `IOException`

    - #### writeInt

          public void writeInt​(int value,
                               long offset)
                        throws IOException

      Write integer value to channel starting at offset.
      Parameters:
        `value` - value to write
        `offset` - non-negative offset
      Throws:
        `IOException`

    - #### readInt

          public int readInt​(long offset)
                      throws IOException

      Read integer value from channel starting at offset.
      Parameters:
        `offset` - non-negative offset
      Returns:
        integer
      Throws:
        `IOException`