So far the operations using Java programs are done on a prompt/terminal which is not stored anywhere. But in the software industry, most of the programs are written to store the information fetched from the program. One such way is to store the fetched information in a file.
What is File Handling in Java?
A file is a container that is used to store various types of information. Data is permanently stored in secondary memory by creating a file with a unique name. A file may consist of text, image or any other document.
Different operations that can be performed on a file are:
- Creation of a new file
- Opening an existing file
- Reading from file
- Writing to a file
- Moving to a specific location in a file
- Closing a file
Various Methods used to perform File operation:
- writeBytes(String s): Writes the string to the file as a sequence of bytes.
- readLine(): Reads the next line of text from this file.
- getFilePointer(): Returns the current offset in this file.
- length(): Returns the length of this file and return type is long.
- close(): Closes this random access file stream and releases any system resources associated with the stream.
- setLength(long newLength): Sets the length of this file.
- seek(long pos): Sets the file-pointer offset, measured from the beginning of this file, at which the next read or write occurs.
File opening modes in Java:
Value | Meaning |
---|---|
“r” | Open for reading only. Invoking any of the write methods of the resulting object will cause an IOException to be thrown. |
“rw” | Open to reading and writing. If the file does not already exist then an attempt will be made to create it. |
“rws” | Open for reading and writing, as with “rw”, and also require that every update to the file’s content or metadata be written synchronously to the underlying storage device. |
“rwd” | Open for reading and writing, as with “rw”, and also require that every update to the file’s content be written synchronously to the underlying storage device. |
Syntax of Opening File using RandomAccessFile:
File file = new File( filename ) RandomAccessFile raf = new RandomAccessFile(file, mode)
CRUD operations using File Handling in Java
Example: Consider that you want to keep records of your friend’s contact number in a file. To distinguish between your friend’s name and contact number you need a separator. To do, so you need to select a separator such as ‘!’ or ‘$’ or some special symbol which does not appear in your friend’s name. Then we will form a string consist of a name, special symbol and number to insert into the file.
Syntax of a Contact in the file friendsContact.txt:
Name!Number
How to Create a File in Java?
- Java
// Java program to create a file "friendsContact.txt"
// and add a new contact in the file
import
java.io.File;
import
java.io.IOException;
import
java.io.RandomAccessFile;
import
java.lang.NumberFormatException;
class
AddFriend {
public
static
void
main(String data[])
{
try
{
// Get the name of the contact to be updated
// from the Command line argument
String newName = data[
0
];
// Get the number to be updated
// from the Command line argument
long
newNumber = Long.parseLong(data[
1
]);
String nameNumberString;
String name;
long
number;
int
index;
// Using file pointer creating the file.
File file =
new
File(
"friendsContact.txt"
);
if
(!file.exists()) {
// Create a new file if not exists.
file.createNewFile();
}
// Opening file in reading and write mode.
RandomAccessFile raf
=
new
RandomAccessFile(file,
"rw"
);
boolean
found =
false
;
// Checking whether the name
// of contact already exists.
// getFilePointer() give the current offset
// value from start of the file.
while
(raf.getFilePointer() < raf.length()) {
// reading line from the file.
nameNumberString = raf.readLine();
// splitting the string to get name and
// number
String[] lineSplit
= nameNumberString.split(
"!"
);
// separating name and number.
name = lineSplit[
0
];
number = Long.parseLong(lineSplit[
1
]);
// if condition to find existence of record.
if
(name == newName
|| number == newNumber) {
found =
true
;
break
;
}
}
if
(found ==
false
) {
// Enter the if block when a record
// is not already present in the file.
nameNumberString
= newName +
"!"
+ String.valueOf(newNumber);
// writeBytes function to write a string
// as a sequence of bytes.
raf.writeBytes(nameNumberString);
// To insert the next record in new line.
raf.writeBytes(System.lineSeparator());
// Print the message
System.out.println(
" Friend added. "
);
// Closing the resources.
raf.close();
}
// The contact to be updated
// could not be found
else
{
// Closing the resources.
raf.close();
// Print the message
System.out.println(
" Input name"
+
" does not exists. "
);
}
}
catch
(IOException ioe) {
System.out.println(ioe);
}
catch
(NumberFormatException nef) {
System.out.println(nef);
}
}
}
Output:
Compiling and Adding the contact in the newly created file:
javac AddFriend.java java AddFriend abc 1111111111 Friend added java AddFriend pqr 1111111111 Input name or number already exist
How to Read a File in Java?
- Java
// Java program to read from file "friendsContact.txt"
// and display the contacts
import
java.io.File;
import
java.io.IOException;
import
java.io.RandomAccessFile;
import
java.lang.NumberFormatException;
class
DisplayFriends {
public
static
void
main(String data[])
{
try
{
String nameNumberString;
String name;
long
number;
int
index;
// Using file pointer creating the file.
File file =
new
File(
"friendsContact.txt"
);
if
(!file.exists()) {
// Create a new file if not exists.
file.createNewFile();
}
// Opening file in reading and write mode.
RandomAccessFile raf
=
new
RandomAccessFile(file,
"rw"
);
boolean
found =
false
;
// Traversing the file
// getFilePointer() give the current offset
// value from start of the file.
while
(raf.getFilePointer() < raf.length()) {
// reading line from the file.
nameNumberString = raf.readLine();
// splitting the string to get name and
// number
String[] lineSplit
= nameNumberString.split(
"!"
);
// separating name and number.
name = lineSplit[
0
];
number = Long.parseLong(lineSplit[
1
]);
// Print the contact data
System.out.println(
"Friend Name: "
+ name +
"\n"
+
"Contact Number: "
+ number +
"\n"
);
}
catch
(IOException ioe)
{
System.out.println(ioe);
}
catch
(NumberFormatException nef)
{
System.out.println(nef);
}
}
}
Output:
Compiling and reading the contacts from the file:
javac DisplayFriends.java java DisplayFriends Friend Name: abc Contact Number: 1234567890 Friend Name: lmn Contact Number: 3333333333 Friend Name: xyz Contact Number: 4444444444