File Class Overview
The java.io.File class provides a abstract representation of file and directory pathnames. It allows manipulation of file system objects.
Path Specifications
Paths can be defined as either absolute (complete from the root) or relative (relative to the current working directory). The File.separator field provieds the system-dependent name separator character.
import java.io.File;
public class FileExample {
public static void main(String[] args) {
// Using forward slashes
File f1 = new File("C:/data/documents/report.txt");
// Using backslashes with escape sequences
File f2 = new File("C:\\data\\documents\\report.txt");
// Using system-independent separator
File f3 = new File("C:" + File.separator + "data" + File.separator + "report.txt");
System.out.println(f1);
System.out.println(f2);
System.out.println(f3);
}
}
File Creation and Directory Operations
import java.io.File;
import java.io.IOException;
public class CreateFilesDirectories {
public static void main(String[] args) throws IOException {
// Create a new file
File newFile = new File("C:/data/sample.txt");
boolean fileCreated = newFile.createNewFile();
System.out.println("File created: " + fileCreated);
// Create a single directory
File singleDir = new File("C:/data/temp");
boolean dirCreated = singleDir.mkdir();
System.out.println("Directory created: " + dirCreated);
// Create nested directories
File nestedDirs = new File("C:/data/projects/java/src");
boolean nestedCreated = nestedDirs.mkdirs();
System.out.println("Nested directories created: " + nestedCreated);
}
}
File Deletion
import java.io.File;
public class DeleteFilesDirectories {
public static void main(String[] args) {
File fileToRemove = new File("C:/data/sample.txt");
boolean fileDeleted = fileToRemove.delete();
System.out.println("File deleted: " + fileDeleted);
File emptyFolder = new File("C:/data/temp");
boolean folderDeleted = emptyFolder.delete();
System.out.println("Empty folder deleted: " + folderDeleted);
// Note: Directories must be empty before deletion
}
}
File Attribute Methods
import java.io.File;
public class FileAttributes {
public static void main(String[] args) {
File target = new File("C:/data/report.pdf");
System.out.println("Is file: " + target.isFile());
System.out.println("Is directory: " + target.isDirectory());
System.out.println("Exists: " + target.exists());
System.out.println("Is hidden: " + target.isHidden());
System.out.println("Is absolute path: " + target.isAbsolute());
if (!target.exists()) {
System.out.println("File does not exist");
}
}
}
Path Information Methods
import java.io.File;
public class PathInformation {
public static void main(String[] args) {
File doc = new File("C:/data/documents/report.txt");
System.out.println("Name: " + doc.getName());
System.out.println("Path: " + doc.getPath());
System.out.println("Parent: " + doc.getParent());
System.out.println("Size (bytes): " + doc.length());
System.out.println("Last modified: " + doc.lastModified());
}
}
Listing Directory Contents
import java.io.File;
public class ListDirectoryContents {
public static void main(String[] args) {
File directory = new File("C:/data");
// Get array of File objects
File[] contents = directory.listFiles();
if (contents != null) {
for (File item : contents) {
System.out.println("Item: " + item);
}
}
// Get array of names as strings
String[] names = directory.list();
if (names != null) {
for (String name : names) {
System.out.println("Name: " + name);
}
}
}
}
Recursive File Operations
Recursive File Listing
import java.io.File;
public class RecursiveFileLister {
public static void main(String[] args) {
listAllFiles(new File("C:/data"));
}
public static void listAllFiles(File directory) {
File[] files = directory.listFiles();
if (files == null) return;
for (File file : files) {
if (file.isFile()) {
System.out.println("File: " + file.getName());
} else if (file.isDirectory()) {
listAllFiles(file); // Recursive call
}
}
}
}
Recursive File Deletion
import java.io.File;
public class RecursiveFileDeletion {
public static void main(String[] args) {
deleteDirectoryContents(new File("C:/temp"));
}
public static void deleteDirectoryContents(File dir) {
File[] contents = dir.listFiles();
if (contents == null) return;
for (File item : contents) {
if (item.isDirectory()) {
deleteDirectoryContents(item); // Recursive call
}
item.delete();
}
}
}
Input/Output Streams
Streams provide sequential access to data for reading from or writing to various sources like files.
Buffered Byte Input Stream
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
public class BufferedByteInputExample {
public static void main(String[] args) throws Exception {
File sourceFile = new File("C:/data/input.txt");
FileInputStream baseStream = new FileInputStream(sourceFile);
BufferedInputStream bufferedStream = new BufferedInputStream(baseStream);
byte[] dataBuffer = new byte[1024]; // 1KB buffer
int bytesRead;
while ((bytesRead = bufferedStream.read(dataBuffer)) != -1) {
String content = new String(dataBuffer, 0, bytesRead);
System.out.print(content);
}
bufferedStream.close();
baseStream.close();
}
}
Understanding the Read Buffer
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
public class BufferMechanics {
public static void main(String[] args) throws Exception {
File dataSource = new File("C:/data/test.txt");
FileInputStream rawStream = new FileInputStream(dataSource);
BufferedInputStream enhancedStream = new BufferedInputStream(rawStream);
// Small buffer for demonstration
byte[] storage = new byte[4];
int firstRead = enhancedStream.read(storage);
System.out.println("Bytes read first time: " + firstRead);
System.out.println("Buffer content: " + new String(storage, 0, firstRead));
int secondRead = enhancedStream.read(storage);
System.out.println("Bytes read second time: " + secondRead);
if (secondRead > 0) {
System.out.println("Buffer content: " + new String(storage, 0, secondRead));
}
enhancedStream.close();
rawStream.close();
}
}