In
this post, you are going to learn
a.
What
is RandomAccessFile
b.
How
to create an instance of RandomAccessFile?
c.
Important
methods used while working with RandomAccessFile
d.
How
can you read the data from file at random position?
e.
How
can you write data to file from specific position?
f.
File
tail implementation using RanddomAccessFile
What is
RandomAccessFile?
You
can read data from any position, write data at any position using
RandomAccessFile.
RandomAccessFile
treats the file data as an array of bytes, you can write the data at any
position of the array and read the data from any position of the array.
How to create an
instance of RandomAccessFile?
RandomAccessFile
class provides below constructors, to create an instance of RandomAccessFile.
RandomAccessFile(File
file, String mode)
RandomAccessFile(String
filePath, String mode)
'mode'
represents the accessMode to be used while opening the file.
Below
table summarizes the possible values of the argument 'mode'.
Mode
|
Description
|
"r"
|
Opens
the file in read only mode. If you try to perform any write operation, it
results in IOException to be thrown
|
"rw"
|
Opens
the file in read-write mode. You can perform both read and write operations
here. If file is not exist already, it creates it.
|
"rws"
|
Opens
the file in read-write mode. Opens the file in read-write mode. every update
to the file's content or metadata be written synchronously to the underlying
storage device.
|
"rwd"
|
Opens
the file in read-write mode. Opens the file in read-write mode. Every update
to the file's content be written synchronously to the underlying storage
device.
|
Important methods
used while working with RandomAccessFile
Below
table summarizes the methods that you use frequently while working with RandomAccessFile.
Method
|
Description
|
public
long getFilePointer()
|
Get
the current position of the file pointer.
|
public
void seek(long position)
|
Set
the file pointer address. Position measured from the beginning of the file.
|
public
long length()
|
Get
the length of the file in bytes.
|
public
void setLength(long newLength)
|
Set
the length of the file in bytes.
If
the present length of the file as returned by the length method is greater
than the newLength argument then the file will be truncated. In this case, if
the file offset as returned by the getFilePointer method is greater than
newLength then after this method returns the offset will be equal to
newLength.
If
the present length of the file as returned by the length method is smaller
than the newLength argument then the file will be extended. In this case, the
contents of the extended portion of the file are not defined.
|
public
int read(byte[] b)
|
Reads
up to b.length bytes of data from this file into an array of bytes.
|
How can you read the
data from file at random position?
By
using below snippet, you can read the contents of the file.
RandomAccessFile
randFile = new RandomAccessFile(filePath, "r")
randFile.seek(position);
byte
b[] = new byte[BUFFER_SIZE];
while
(randFile.read(b) != -1) {
String s = new String(b);
System.out.println(s);
}
testData.txt
If you can keep your head when all about you Are losing theirs and blaming it on you, If you can trust yourself when all men doubt you, But make allowance for their doubting too;
Find
the below working application.
FileUtil.java
package com.sample.util; import java.io.IOException; import java.io.RandomAccessFile; public class FileUtil { private static final int BUFFER_SIZE = 4096; public static void prinFileContentFrom(String filePath, int position) throws IOException { try (RandomAccessFile randFile = new RandomAccessFile(filePath, "r")) { long length = randFile.length(); if (position > length) { throw new IllegalArgumentException("position : " + position + " must be less than " + length); } randFile.seek(position); byte b[] = new byte[BUFFER_SIZE]; while (randFile.read(b) != -1) { String s = new String(b); System.out.println(s); } } } }
Test.java
package com.sample.test; import com.sample.util.FileUtil; public class Test { private static final String FILE_PATH = "C:\\Users\\krishna\\testData.txt"; public static void main(String args[]) throws Exception { System.out.println("Reading the content from starting of the file"); FileUtil.prinFileContentFrom(FILE_PATH, 0); System.out.println("\n*************************"); System.out.println("Reading the content from the offset 50\n"); FileUtil.prinFileContentFrom(FILE_PATH, 50); } }
Output
Reading the content from starting of the file If you can keep your head when all about you Are losing theirs and blaming it on you, If you can trust yourself when all men doubt you, But make allowance for their doubting too; ************************* Reading the content from the offset 50 Are losing theirs and blaming it on you, If you can trust yourself when all men doubt you, But make allowance for their doubting too;
How can you write
data to file from specific position?
Below
snippet is used to write data to file from given position.
try
(RandomAccessFile randFile = new RandomAccessFile(filePath, "rw")) {
randFile.seek(position);
randFile.write(data.getBytes());
}
Find
the below working application.
FileUtil.java
package com.sample.util; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; public class FileUtil { private static final int BUFFER_SIZE = 4096; public static void writeContentsToFile(String filePath, String data, int position) throws FileNotFoundException, IOException { try (RandomAccessFile randFile = new RandomAccessFile(filePath, "rw")) { randFile.seek(position); randFile.write(data.getBytes()); } } public static void printFileContent(String filePath) throws IOException{ printFileContentFrom(filePath, 0); } public static void printFileContentFrom(String filePath, int position) throws IOException { try (RandomAccessFile randFile = new RandomAccessFile(filePath, "r")) { long length = randFile.length(); if (position > length) { throw new IllegalArgumentException("position : " + position + " must be less than " + length); } randFile.seek(position); byte b[] = new byte[BUFFER_SIZE]; while (randFile.read(b) != -1) { String s = new String(b); System.out.println(s); } } } }
Test.java
package com.sample.test; import com.sample.util.FileUtil; public class Test { private static final String FILE_PATH = "C:\\Users\\krishna\\testData.txt"; public static void main(String args[]) throws Exception { System.out.println("Reading the content from starting of the file"); FileUtil.printFileContent(FILE_PATH); String data = "line1\nline2\nline3\nline4"; System.out.println("\nDATA AFTER ADDING\n"); FileUtil.writeContentsToFile(FILE_PATH, data, 50); FileUtil.printFileContent(FILE_PATH); } }
Output
Reading the content from starting of the file If you can keep your head when all about you Are losing theirs and blaming it on you, If you can trust yourself when all men doubt you, But make allowance for their doubting too; DATA AFTER ADDING If you can keep your head when all about you line1 line2 line3 line4d blaming it on you, If you can trust yourself when all men doubt you, But make allowance for their doubting too;
You may like
No comments:
Post a Comment