scalax.file

FileOps

abstract class FileOps extends Seekable

An object for reading and writing files. FileOps provides access to Channels and streams as well as providing methods for performing simple tasks on files easily.

Obtaining a FileOps from a object does not open a file execution of methods will open a file. Thus it is important to handle NotFileException and FileNotFoundException. Depending on the method one or both exceptions must be handled.

Examples of exception handling:


 try {
  file.lines flatMap _.split(":")
 } catch {
  case FileNotFoundException => fail
  case NotFileException => fail
 }

or using the Exceptions object

import scala.util.control.Exceptions
val catcher = catching(classOf[NotFileException], classOf[FileNotFoundException])

catcher {
  file.lines flatMap _.split(":")
}

The API into 3 main sections

open() attempts to perform all actions using the open channel in order to improve the performance of the operations.

lock() performs all the actions using the same channel

Self Type
Path
Since

1.0

Linear Supertypes
Seekable, Output, Input, AnyRef, Any
Known Subclasses
Ordering
  1. Alphabetic
  2. By inheritance
Inherited
  1. FileOps
  2. Seekable
  3. Output
  4. Input
  5. AnyRef
  6. Any
  1. Hide All
  2. Show all
Learn more about member selection
Visibility
  1. Public
  2. All

Instance Constructors

  1. new FileOps()

Abstract Value Members

  1. abstract def channel(openOptions: OpenOption*): SeekableByteChannelResource[SeekableByteChannel]

    Obtains a ByteChannel for read/write access to the file.

    Obtains a ByteChannel for read/write access to the file. If no OpenOptions are specified the underlying file will be opened with read/write/create/truncate options.

    The Resource will be configured with the associated fileSystem's ResourceContext

    All OpenOption can be used

    openOptions

    the options that define how the file is opened when using the stream Default is options only

  2. abstract def context: ResourceContext

    Get the Resource context that configures how the underlying resource is accessed

    Get the Resource context that configures how the underlying resource is accessed

    returns

    the associated ResourceContext

    Definition Classes
    SeekableInput
  3. abstract def fileChannel(openOptions: OpenOption*): Option[SeekableByteChannelResource[SeekableByteChannel]]

    Obtains a FileChannel for read/write access to the file.

    Obtains a FileChannel for read/write access to the file. Not all filesystems can support FileChannels therefore None will be returned if the filesystem does not support FileChannels. If no OpenOptions are specified the underlying file will be opened with read/write/create/truncate options

    All OpenOption can be used

    The Resource will be configured with the associated fileSystem's ResourceContext

    openOptions

    the options that define how the file is opened when using the stream Default is read/write/create/truncate

  4. abstract def inputStream(): InputStreamResource[InputStream]

    Obtains an input stream resource for reading from the file

    Obtains an input stream resource for reading from the file

    The Resource will be configured with the associated fileSystem's ResourceContext

  5. abstract def outputStream(openOptions: OpenOption*): OutputStreamResource[OutputStream]

    Obtains an OutputStreamResource for writing to the file

    Obtains an OutputStreamResource for writing to the file

    The Resource will be configured with the associated fileSystem's ResourceContext

    All OpenOption can be used except Read which will be ignored if present

    openOptions

    the options that define how the file is opened when using the stream The Write option is implicitly added to the set of options Default is write/create/truncate

  6. abstract def size: Option[Long]

    The number of bytes that can be read from the underlying resource.

    The number of bytes that can be read from the underlying resource.

    if length == None then it is not possible to determine the number of bytes in advance.

    Definition Classes
    Input
  7. abstract def withLock[R](start: Long = 0, size: Long = 1, shared: Boolean = false, context: ResourceContext = fileSystem.context)(block: (Seekable) ⇒ R): Option[R]

    Performs an operation on the file with a FileLock

    Performs an operation on the file with a FileLock

    Not all filesystems support locking. If not then None will be returned by the method

    The defaults will lock the entire file with an exclusive lock. It is possible to modify the lock so that it only locks part of the file and may be a shared lock. Not all filesystems support shared locks but if that is the case the lock will automatically be upgraded to a exclusiveLock

    The semantics of this locking behavious are very similar to those in the java.nio.channels.FileLock It is recommended that those javadocs are read and the warnings present in those docs are followed.

    start

    the start position of the lock. Must be a non-negative Long

    size

    the length in bits the lock. If -1 then the entire file from start to the end will be locked

    shared

    If true then a shared lock will be obtained if possible. If shared locks are not supported then an exclusive lock will be obtained

    context

    The context for controlling buffer sizes error handling and other low level configuration

    returns

    the result the result from the block or None if the filesystem does not support locking

Concrete Value Members

  1. final def !=(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  2. final def !=(arg0: Any): Boolean

    Definition Classes
    Any
  3. final def ##(): Int

    Definition Classes
    AnyRef → Any
  4. final def ==(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  5. final def ==(arg0: Any): Boolean

    Definition Classes
    Any
  6. def append(string: String)(implicit codec: Codec = Codec.default): Unit

    Append a string to the end of the Seekable object.

    Append a string to the end of the Seekable object.

    string

    the data to write

    codec

    the codec of the string to be written. The string will be converted to the encoding of scalax.io.Codec

    Definition Classes
    Seekable
  7. def append[T](data: T)(implicit converter: OutputConverter[T]): Unit

    Append bytes to the end of a file

    Append bytes to the end of a file

    Important: The use of an Array is highly recommended because normally arrays can be more efficiently written using the underlying APIs

    data

    The data to write. This can be any type that has a scalax.io.OutputConverter associated with it. There are predefined $outputConverters for several types. See the scalax.io.OutputConverter object for the predefined types and for objects to simplify implementing custom scalax.io.OutputConverter

    $converterParam

    Definition Classes
    Seekable
  8. def appendChannel[U](f: (SeekableByteChannel) ⇒ U): U

    Attributes
    protected
    Definition Classes
    Seekable
  9. def appendIntsAsBytes(data: Int*): Unit

    Since the scalax.io.OutputConverter object defined for writing Ints encodes Ints using 4 bytes this method is provided to simply write an array of Ints as if they are Bytes.

    Since the scalax.io.OutputConverter object defined for writing Ints encodes Ints using 4 bytes this method is provided to simply write an array of Ints as if they are Bytes. In other words just taking the first byte. This is pretty common in Java.io style IO. IE

    outputStream.write(1)

    1 is written as a single byte.

    Definition Classes
    Seekable
  10. def appendStrings(strings: Traversable[String], separator: String = "")(implicit codec: Codec = Codec.default): Unit

    Append several strings to the end of the Seekable object.

    Append several strings to the end of the Seekable object.

    strings

    The strings to write

    separator

    A string to add between each string. It is not added to the before the first string or after the last.

    codec

    The codec of the strings to be written. The strings will be converted to the encoding of scalax.io.Codec

    Definition Classes
    Seekable
  11. final def asInstanceOf[T0]: T0

    Definition Classes
    Any
  12. def blocks(blockSize: Option[Int] = None): LongTraversable[ByteBlock]

    Read the input as blocks of bytes.

    Read the input as blocks of bytes. This method should be avoided unless the maximum performance is absolutely required because bytes provides very good performance and is a better API for most applications.

    However since it better reflects how data is read with most input sources (like InputStreams and ReadableByteChannels); blocks is slightly more performance than bytes and therefore can be used when performance is the most important consideration.

    blockSize

    block size can optionally be specified but the default is normally acceptable.

    Definition Classes
    SeekableInput
  13. def byteArray: Array[Byte]

    This method aspires to be the fastest way to read a stream of known length into memory.

    This method aspires to be the fastest way to read a stream of known length into memory.

    Definition Classes
    Input
  14. def bytes: LongTraversable[Byte]

    Obtains a Traversable for conveniently processing the resource as bytes.

    Obtains a Traversable for conveniently processing the resource as bytes.

    returns

    an non-strict traversable over all the bytes

    Definition Classes
    SeekableInput
  15. def bytesAsInts: LongTraversable[Int]

    Obtains a Traversable for conveniently processing the file as Ints.

    Obtains a Traversable for conveniently processing the file as Ints.

    returns

    an non-strict traversable over all the bytes with the bytes being represented as Ints

    Definition Classes
    SeekableInput
  16. def chars(implicit codec: Codec): LongTraversable[Char]

    The characters in the object.

    The characters in the object.

    If the codec is not the same as the source codec (the codec of the underlying data) then the characters will converted to the desired codec.

    codec

    The codec representing the desired encoding of the characters

    returns

    an traversable of all the characters

    Definition Classes
    FileOpsSeekableInput
  17. def clone(): AnyRef

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws()
  18. def copyDataTo(output: Output): Unit

    Copy all data from this Input object to the Output object as efficiently as possible.

    Copy all data from this Input object to the Output object as efficiently as possible.

    output

    output sink to copy the data to

    Definition Classes
    Input
  19. def doCopyFrom(input: Input): Unit

    If possible efficiently copy data from input.

    If possible efficiently copy data from input. It MUST NOT forward request to input's copyTo method because that could trigger an infinate loop

    Attributes
    protected
    Definition Classes
    Output
  20. final def eq(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  21. def equals(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  22. def finalize(): Unit

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws()
  23. final def getClass(): Class[_]

    Definition Classes
    AnyRef → Any
  24. def hashCode(): Int

    Definition Classes
    AnyRef → Any
  25. def insert[T](position: Long, data: T)(implicit converter: OutputConverter[T]): Any

    Inserts data at a position in the Seekable.

    Inserts data at a position in the Seekable. The actual position in the Seekable where the data is inserted depends on the type of data being written. For example if Longs are being written then position calculated as position * 8

    Important: The use of an Array is highly recommended because normally arrays can be more efficiently written using the underlying APIs

    position

    The position where the data is inserted into the Seekable. The actual position in the Seekable where the data is inserted depends on the type of data being written. For example if Longs are being written then position calculated as position * 8

    data

    The data to write. This can be any type that has a scalax.io.OutputConverter associated with it. There are predefined $outputConverters for several types. See the scalax.io.OutputConverter object for the predefined types and for objects to simplify implementing custom scalax.io.OutputConverter

    $converterParam

    Definition Classes
    Seekable
  26. def insert(position: Long, string: String)(implicit codec: Codec = Codec.default): Unit

    Inserts a string at a position in the Seekable.

    Inserts a string at a position in the Seekable. This is a potentially inefficient because of the need to count characters. If the codec is not a fixed sized codec (for example UTF8) each character must be converted in the file up to the point of insertion.

    position

    The position in the file to perform the insert. A position of 2 will insert the character after the second character (not byte).

    string

    The string that will be inserted into the Seekable

    codec

    The codec to use for determining the location for inserting the string and for encoding the string as bytes

    Definition Classes
    Seekable
  27. def insertIntsAsBytes(position: Long, data: Int*): Any

    Since the scalax.io.OutputConverter object defined for writing Ints encodes Ints using 4 bytes this method is provided to simply write an array of Ints as if they are Bytes.

    Since the scalax.io.OutputConverter object defined for writing Ints encodes Ints using 4 bytes this method is provided to simply write an array of Ints as if they are Bytes. In other words just taking the first byte. This is pretty common in Java.io style IO. IE

    outputStream.write(1)

    1 is written as a single byte.

    Definition Classes
    Seekable
  28. final def isInstanceOf[T0]: Boolean

    Definition Classes
    Any
  29. def lines(terminator: Terminator = Terminators.Auto, includeTerminator: Boolean = false)(implicit codec: Codec = Codec.default): LongTraversable[String]

    Obtain an non-strict traversable for iterating through the lines in the object

    Obtain an non-strict traversable for iterating through the lines in the object

    If the codec is not the same as the source codec (the codec of the underlying data) then the characters will converted to the desired codec.

    terminator

    The strategy for determining the end of line Default is to auto-detect the EOL

    includeTerminator

    if true then the line will end with the line terminator Default is false

    codec

    The codec representing the desired encoding of the characters

    returns

    a non-strict traversable for iterating through all the lines

    Definition Classes
    Input
  30. final def ne(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  31. final def notify(): Unit

    Definition Classes
    AnyRef
  32. final def notifyAll(): Unit

    Definition Classes
    AnyRef
  33. def outputProcessor: OutputProcessor

    Execute the function 'f' passing an Output instance that performs all operations on a single opened connection to the underlying resource.

    Execute the function 'f' passing an Output instance that performs all operations on a single opened connection to the underlying resource. Typically each call to one of the Output's methods results in a new connection. For example if the underlying OutputStream truncates the file each time the connection is made then calling write two times will result in the contents of the second write overwriting the second write.

    Even if the underlying resource is an appending, using open will be more efficient since the connection only needs to be made a single time.

    returns

    the result of the function

    Definition Classes
    Output
  34. def patch[T](position: Long, data: T, overwrite: Overwrite)(implicit converter: OutputConverter[T]): Unit

    Update a portion of the file content at the declared location.

    Update a portion of the file content at the declared location. This is the most flexible of the random access methods but is also (probably) the trickiest to fully understand. That said it behaves (almost) identical to a scala.collection.Seq.patch method, so if you understand that you should not have difficulty understanding this method.

    Important: The use of an Array is highly recommended because normally arrays can be more efficiently written using the underlying APIs

    To append data the position must >= size

    If the position is within the file but the position + bytes.length is beyond the end of the file the file will be enlarged so that the entire string can fit in the file

    The write begins at the position indicated. So if position = 0 then the write will begin at the first byte of the file.

    position

    The start position of the update starting at 0. The position must be within the file or == size (for appending)

    data

    The data to write. This can be any type that has a scalax.io.OutputConverter associated with it. There are predefined $outputConverters for several types. See the scalax.io.OutputConverter object for the predefined types and for objects to simplify implementing custom scalax.io.OutputConverter

    overwrite

    The strategy that dictates how many characters/bytes/units are overwritten $converterParam

    Definition Classes
    Seekable
  35. def patch(position: Long, string: String, overwrite: Overwrite)(implicit codec: Codec = Codec.default): Unit

    Update a portion of the file content at the declared location.

    Update a portion of the file content at the declared location. This is the most flexible of the random access methods but is also (probably) the trickiest to fully understand. That said it behaves (almost) identical to a scala.collection.Seq.patch method, so if you understand that you should not have difficulty understanding this method.

    If the position is beyond the end of the file a BufferUnderflow Exception will be thrown

    If the position is within the file but the position + string.getBytes(codec).length is beyond the end of the file the file will be enlarged so that the entire string can fit in the file

    The write begins at the position indicated. So if position = 0 then the write will begin at the first byte of the file.

    position

    The start position of the update starting at 0. The position is the position'th character in the file using the codec for decoding the file The position must be within the file.

    string

    The string to write to the file starting at position.

    overwrite

    The strategy that dictates how many characters/bytes/units are overwritten

    codec

    The codec to use for decoding the underlying data into characters

    Definition Classes
    Seekable
  36. def patchIntsAsBytes(position: Long, overwrite: Overwrite, data: Int*): Unit

    Since the scalax.io.OutputConverter object defined for writing Ints encodes Ints using 4 bytes this method is provided to simply write an array of Ints as if they are Bytes.

    Since the scalax.io.OutputConverter object defined for writing Ints encodes Ints using 4 bytes this method is provided to simply write an array of Ints as if they are Bytes. In other words just taking the first byte. This is pretty common in Java.io style IO. IE

    outputStream.write(1)

    1 is written as a single byte.

    Definition Classes
    Seekable
  37. def readWriteChannel[U](f: (SeekableByteChannel) ⇒ U): U

    Attributes
    protected
    Definition Classes
    Seekable
  38. def seekableProcessor(openOptions: Seq[OpenOption] = List(Read,Write), context: ResourceContext = fileSystem.context): SeekableProcessor

    Runs several operations as efficiently as possible.

    Runs several operations as efficiently as possible. If the filesystem permits random access then the same channel will be used to perform all operations.

    Note: only the direct file operations (bytes,lines,write,patch etc...) can be used and expected to use the same resource. The resource methods all created new streams.

    Note: not all file systems support this, if not then at worst the performance is the same as if they where performed outside an open block

    openOptions

    The options that define how the file is opened for the duration of the operation Default is Write/Create/Truncate

    context

    The context for controlling buffer sizes error handling and other low level configuration defaults to filesystem Resource context

  39. def seekableProcessor: SeekableProcessor

    Definition Classes
    Seekable
  40. def string(implicit codec: Codec = Codec.default): String

    Loads all the characters into memory.

    Loads all the characters into memory. There is no protection against loading very large files/amounts of data.

    codec

    The codec representing the desired encoding of the characters

    Definition Classes
    Input
  41. final def synchronized[T0](arg0: ⇒ T0): T0

    Definition Classes
    AnyRef
  42. def tempFile(): Input with Output

    Create a temporary file to use for performing certain operations.

    Create a temporary file to use for performing certain operations. It should be as efficient as possible to copy from the temporary file to this Seekable and vice-versa. Can be overridden for performance

    Attributes
    protected
    Definition Classes
    Seekable
  43. def toByteChannelResource(): InputResource[ByteChannel]

    Open a seekableByteChannelResource to use for creating other long traversables like chars or bytes as its.

    Open a seekableByteChannelResource to use for creating other long traversables like chars or bytes as its.

    This method may throw an exception if the file does not exist

    Main feature is it sets position to 0 each call so the resource will always read from 0

    Attributes
    protected
    Definition Classes
    FileOpsSeekable
  44. def toString(): String

    Definition Classes
    AnyRef → Any
  45. def truncate(position: Long): Unit

    Truncate/Chop the Seekable to the number of bytes declared by the position param

    Truncate/Chop the Seekable to the number of bytes declared by the position param

    Definition Classes
    Seekable
  46. def truncateString(position: Long)(implicit codec: Codec = Codec.default): Unit

    Definition Classes
    Seekable
  47. def underlyingChannel(append: Boolean): OpenedResource[SeekableByteChannel]

    Attributes
    protected
    Definition Classes
    FileOpsSeekable
  48. def underlyingOutput: OutputResource[WritableByteChannel]

    Attributes
    protected
    Definition Classes
    FileOpsSeekableOutput
  49. final def wait(): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws()
  50. final def wait(arg0: Long, arg1: Int): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws()
  51. final def wait(arg0: Long): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws()
  52. def write(string: String)(implicit codec: Codec = Codec.default): Unit

    Writes a string.

    Writes a string.

    string

    the data to write

    codec

    the codec of the string to be written. The string will be converted to the encoding of sourceCodec Default is sourceCodec

    Definition Classes
    Output
  53. def write[T](data: T)(implicit writer: OutputConverter[T]): Unit

    Write data to the underlying object.

    Write data to the underlying object. Each time write is called the resource is reopened, in the case of a file this means that the file will be opened and truncated. The

    In the case of writing ints and bytes it is often recommended to write arrays of data since normally the underlying object can write arrays of bytes or integers most efficiently.

    Since Characters require a codec to write to an OutputStream characters cannot be written with this method unless a OutputWriterFunction.CharFunction object is provided as the writer.

    data

    The data to write to underlying object. Any data that has a resolvable scalax.io.OutputConverter can be written. See the scalax.io.OutputConverter object for the defined scalax.io.OutputConverter implementations and classes to assist implementing more.

    writer

    The strategy used to write the data to the underlying object. Many standard data-types are implicitly resolved and do not need to be supplied

    Definition Classes
    Output
    See also

    #writeChars for more on writing characters

  54. def writeChars(characters: TraversableOnce[Char])(implicit codec: Codec = Codec.default): Unit

    Definition Classes
    Output
  55. def writeIntsAsBytes(data: Int*): Unit

    Since the scalax.io.OutputConverter object defined for writing Ints encodes Ints using 4 bytes this method is provided to simply write an array of Ints as if they are Bytes.

    Since the scalax.io.OutputConverter object defined for writing Ints encodes Ints using 4 bytes this method is provided to simply write an array of Ints as if they are Bytes. In other words just taking the first byte. This is pretty common in Java.io style IO. IE

    outputStream.write(1)

    1 is written as a single byte.

    Definition Classes
    Output
  56. def writeStrings(strings: Traversable[String], separator: String = "")(implicit codec: Codec = Codec.default): Unit

    Write several strings.

    Write several strings.

    strings

    The data to write

    separator

    A string to add between each string. It is not added to the before the first string or after the last.

    codec

    The codec of the strings to be written. The strings will be converted to the encoding of sourceCodec

    Definition Classes
    Output

Inherited from Seekable

Inherited from Output

Inherited from Input

Inherited from AnyRef

Inherited from Any

Ungrouped