- Java Tutorial
- Java Introduction
- Java Features
- Java Simple Program
- JVM, JDK and JRE
- Java Syntax
- Java Comments
- Java Keywords
- Java Variables
- Java Literals
- Java Separators
- Java Datatypes
- Java Operators
- Java Statements
- Java Strings
- Java Arrays
- Control Statement
- Java If
- Java If-else
- Java If-else-if
- Java Nested If
- Java Switch
- Iteration Statement
- Java For Loop
- Java For Each Loop
- Java While Loop
- Java Do While Loop
- Java Nested Loop
- Java Break/Continue
- Java Methods
- Java Methods
- Java Method Parameters
- Java Method Overloading
- Java Recursion
- Java OOPS
- Java OOPs
- Java Classes/Objects
- Java Inheritance
- Java Polymorphism
- Java Encapsulation
- Java Abstraction
- Java Modifiers
- Java Constructors
- Java Interface
- Java static keyword
- Java this keyword
- Java File Handling
- Java File
- Java Create File
- Java Read/Write File
- Java Delete File
- Java Program To
- Add Two Numbers
- Even or Odd Numbers
- Reverse a String
- Swap Two Numbers
- Prime Number
- Fibonacci Sequence
- Palindrome Strings
- Java Reference
- Java String Methods
- Java Math Methods
Java File Handling
In Java, file handling is a fundamental concept that allows your applications to read from and write to files on the local file system. This is crucial for persisting data, reading configuration files, or logging application events. Most file-related operations are performed using classes from the java.io package.
File Class:
- The File class is an abstract representation of file and directory pathnames. Crucially, creating a
Fileobject doesn't create a physical file on your disk; it simply creates a reference to a path that might exist. - It provides methods to check properties like file size, permissions, and whether the path refers to a file or a directory.
- Example:
import java.io.File;
// Creating a file object for a relative path
File file = new File("config.properties");
if (file.exists()) {
System.out.println("File name: " + file.getName());
System.out.println("Absolute path: " + file.getAbsolutePath());
}
File.separator instead of hardcoded slashes (like "/" or "\") to ensure your code works seamlessly across both Windows and Linux/macOS systems.
File Input/Output Streams:
- Streams are used to move data in or out of your program. Java distinguishes between Byte Streams (for binary data like images or PDFs) and Character Streams (for plain text).
- The FileInputStream and FileOutputStream classes are the workhorses for binary data. For text, FileReader and FileWriter are more appropriate because they handle character encoding (like UTF-8) automatically.
- Example:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
// Reading an image and copying it
try (FileInputStream in = new FileInputStream("image.jpg");
FileOutputStream out = new FileOutputStream("copy_image.jpg")) {
int byteData;
while ((byteData = in.read()) != -1) {
out.write(byteData);
}
} catch (IOException e) {
e.printStackTrace();
}
Buffered Streams:
- Accessing the hard drive is "expensive" in terms of performance. Buffered streams (
BufferedReader,BufferedWriter) act as a middleman. They read a large chunk of data into memory (a buffer) all at once, so your program doesn't have to hit the disk for every single byte or character. - This can make file operations significantly faster, especially when dealing with large text files.
- Example:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
try (BufferedReader reader = new BufferedReader(new FileReader("logs.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
FileReader in a BufferedReader when reading text. It is almost always more efficient and provides the convenient readLine() method.
Reading and Writing Files:
- read(): Reads a single byte or character. Returns -1 when the end of the file is reached.
- readLine(): Specific to
BufferedReader, this reads a full line of text, which is very common in log processing. - write(): Sends data to the file. Note that by default,
FileWriterwill overwrite existing content unless you set the "append" flag to true. - Example:
import java.io.FileWriter;
import java.io.IOException;
// Writing text to a file. The 'true' parameter enables append mode.
try (FileWriter writer = new FileWriter("notes.txt", true)) {
writer.write("Adding a new entry to the file.\n");
} catch (IOException e) {
e.printStackTrace();
}
write() doesn't automatically add a new line. You must explicitly add \n or use a PrintWriter for easier formatting.
File Operations:
- Beyond reading and writing data, the File class manages the file system itself. You can create empty files, create nested directories, or delete temporary files.
- Methods like
mkdir()(single directory) andmkdirs()(nested directories) are vital for setting up application folders. - Example:
File dir = new File("data/reports");
if (!dir.exists()) {
boolean success = dir.mkdirs(); // Creates both 'data' and 'reports'
if (success) {
File newFile = new File(dir, "report_01.txt");
newFile.createNewFile();
}
}
file.delete() will fail if the directory is not empty. You must delete all files inside a folder before you can delete the folder itself.
Summary
File handling in Java is a robust system that allows for the manipulation and processing of files and directories. By mastering the File class for metadata, Streams for binary data, and Buffered Readers/Writers for text, you can build applications that effectively manage persistent data. Remember to always handle IOExceptions and close your resources using try-with-resources to ensure application stability.