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
All OpenOption
can be used
the options that define how the file is opened when using the stream Default is options only
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 options that define how the file is opened when using the stream Default is read/write/create/truncate
Obtains an input stream resource for reading from the file
Obtains an input stream resource for reading from the file
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
The options that define how the file is opened for the duration of the operation Default is Write/Create/Truncate
The function that will be executed within the block
Obtains an OutputStreamResource for writing to the file
Obtains an OutputStreamResource for writing to the file
All OpenOption
can be used except Read which will be ignored if present
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
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.
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 sematics 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.
the start position of the lock. Must be a non-negative Long
the length in bits the lock. If -1 then the entire file from start to the end will be locked
If true then a shared lock will be obtained if possible. If shared locks are not supported then an exclusive lock will be obtained
the result the result from the block or None if the filesystem does not support locking
Append a string to the end of the Seekable object.
Append a string to the end of the Seekable object.
the data to write
the codec of the string to be written. The string will
be converted to the encoding of codec
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
The data to write. This can be any type that has a OutputConverter associated with it. There are predefined $outputConverters for several types. See the OutputConverter object for the predefined types and for objects to simplify implementing custom OutputConverter
$converterParam
Since the 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 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.
Append several strings to the end of the Seekable object.
Append several strings to the end of the Seekable object.
The strings to write
A string to add between each string. It is not added to the before the first string or after the last.
The codec of the strings to be written. The strings will
be converted to the encoding of codec
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.
Obtains a Traversable for conveniently processing the resource as bytes.
Obtains a Traversable for conveniently processing the file as Ints.
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.
The codec representing the desired encoding of the characters @return an traversable of all the characters
Copy data from an input to this output.
Copy data from an input to this output. Input will call this method from copyTo if it does not know how to efficiently copy the data. This method thus will copy as effiently as possible and if all else fails simply write the bytes
the source to read data from
do not forward request to input's copyTo method. Often only one end of the transaction will know how to efficiently transfer data so a common pattern is to check the input and see if the type of the Input object is a known type. If not then the input object will be sent the request. However, to prevent an infinite loop the finalize will be set to true so the request is not then forwarded back to copyFrom
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 sink to copy the data to
do not forward request to output's copyFrom method. Often only one end of the transaction will know how to efficiently transfer data so a common pattern is to check the output and see if the type of the Output object is a known type. If not then the output object will be sent the request. However, to prevent an infinite loop the finalize will be set to true so the request is not then forwarded back to copyTo
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
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
The data to write. This can be any type that has a OutputConverter associated with it. There are predefined $outputConverters for several types. See the OutputConverter object for the predefined types and for objects to simplify implementing custom OutputConverter
$converterParam
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.
The position in the file to perform the insert. A position of 2 will insert the character after the second character (not byte).
The string that will be inserted into the Seekable
The codec to use for determining the location for inserting the string and for encoding the string as bytes
Since the 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 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.
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.
The strategy for determining the end of line Default is to auto-detect the EOL
if true then the line will end with the line terminator Default is false
@return a non-strict traversable for iterating through all the lines
The codec representing the desired encoding of the characters
Execute the function 'f' passing an Seekable instance that performs all operations on a single opened connection to the underlying resource.
Execute the function 'f' passing an Seekable instance that performs all operations on a single opened connection to the underlying resource. Typically each call to one of the Seekable's methods results in a new connection. For example if write it called typically it will write to the start of the seekable but in open it will write to the current position.
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.
the function to execute on the new Output instance (which uses a single connection)
the result of the function
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.
the function to execute on the new Output instance (which uses a single connection)
the result of the function
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.
The start position of the update starting at 0. The position must be within the file or == size (for appending)
The data to write. This can be any type that has a OutputConverter associated with it. There are predefined $outputConverters for several types. See the OutputConverter object for the predefined types and for objects to simplify implementing custom OutputConverter
The strategy that dictates how many characters/bytes/units are overwritten $converterParam
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.
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.
The string to write to the file starting at position.
The strategy that dictates how many characters/bytes/units are overwritten
The codec to use for decoding the underlying data into characters
Since the 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 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.
Loads all the characters into memory.
Loads all the characters into memory. There is no protection against loading very large files/amounts of data.
The codec representing the desired encoding of the characters
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
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
Writes a string.
Writes a string.
the data to write
the codec of the string to be written. The string will
be converted to the encoding of sourceCodec
Default is sourceCodec
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.
The data to write to underlying object. Any data that has a resolvable OutputConverter can be written. See the OutputConverter object for the defined OutputConverter implementations and classes to assist implementing more.
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
#writeChars for more on writing characters
Since the 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 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.
Write several strings.
Write several strings.
The data to write
A string to add between each string. It is not added to the before the first string or after the last.
The codec of the strings to be written. The strings will
be converted to the encoding of sourceCodec
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:
or using the Exceptions objectThe 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
1.0