Lesson Completion
Back to course

File Class: Working with Files and Directories

Beginner
12 minutes4.7Java

1. The Hook (The "Byte-Sized" Intro)

In a Nutshell: File class (java.io) represents file/directory paths and provides metadata/operations. Does NOT read/write content—only manages paths! Methods: exists() (check existence), isFile()/isDirectory() (check type), length() (file size), list() (directory contents), createNewFile() (create file), mkdir()/mkdirs() (create directories), delete() (remove). Platform-independent but legacy—use NIO.2 Path/Files (Java 7+) for production!

Think of real estate agent. File class = agent who knows property locations, sizes, prices (metadata), and can buy/sell (create/delete). Agent doesn't live in the house (doesn't read contents)!


2. Conceptual Clarity (The "Simple" Tier)

💡 The Analogy

  • File object: Address on a map (may or may not exist)
  • exists(): Check if house is built at address
  • list(): List all houses on a street (directory)

3. Technical Mastery (The "Deep Dive")

File Class Operations

CategoryMethodsPurpose
CreationcreateNewFile(), mkdir(), mkdirs()Create files/dirs
Deletiondelete(), deleteOnExit()Remove files/dirs
Metadataexists(), length(), lastModified()File info
Type checksisFile(), isDirectory(), isHidden()Type queries
PermissionscanRead(), canWrite(), canExecute()Access checks
Directory opslist(), listFiles()List contents
Path opsgetAbsolutePath(), getName(), getParent()Path manipulation

4. Interactive & Applied Code

java
import java.io.*; import java.util.*; public class FileClassDemo { public static void main(String[] args) { demonstrateFileCreation(); demonstrateFileMetadata(); demonstrateDirectoryOperations(); demonstrateFileFilters(); } // Creating files and directories static void demonstrateFileCreation() { System.out.println("=== FILE CREATION ==="); // Create file File file = new File("test.txt"); try { if (file.createNewFile()) { System.out.println("File created: " + file.getName()); } else { System.out.println("File already exists"); } } catch (IOException e) { e.printStackTrace(); } // Create directory File dir = new File("testdir"); if (dir.mkdir()) { System.out.println("Directory created: " + dir.getName()); } // Create nested directories File nestedDir = new File("parent/child/grandchild"); if (nestedDir.mkdirs()) { // mkdirs creates parent dirs System.out.println("Nested directories created"); } } // File metadata static void demonstrateFileMetadata() { System.out.println("\n=== FILE METADATA ==="); File file = new File("test.txt"); if (file.exists()) { System.out.println("Name: " + file.getName()); System.out.println("Absolute path: " + file.getAbsolutePath()); System.out.println("Parent: " + file.getParent()); System.out.println("Is file: " + file.isFile()); System.out.println("Is directory: " + file.isDirectory()); System.out.println("Is hidden: " + file.isHidden()); System.out.println("Can read: " + file.canRead()); System.out.println("Can write: " + file.canWrite()); System.out.println("Can execute: " + file.canExecute()); System.out.println("Size: " + file.length() + " bytes"); System.out.println("Last modified: " + new Date(file.lastModified())); } else { System.out.println("File does not exist"); } } // Directory operations static void demonstrateDirectoryOperations() { System.out.println("\n=== DIRECTORY OPERATIONS ==="); File dir = new File("."); // List files (returns String[]) String[] files = dir.list(); System.out.println("Files in current directory:"); if (files != null) { for (String file : files) { System.out.println(" " + file); } } // List files (returns File[]) File[] fileObjects = dir.listFiles(); System.out.println("\nFile objects:"); if (fileObjects != null) { for (File file : fileObjects) { String type = file.isDirectory() ? "[DIR]" : "[FILE]"; System.out.println(" " + type + " " + file.getName()); } } } // File filters static void demonstrateFileFilters() { System.out.println("\n=== FILE FILTERS ==="); File dir = new File("."); // Filter by extension (FilenameFilter) FilenameFilter txtFilter = (dir1, name) -> name.endsWith(".txt"); String[] txtFiles = dir.list(txtFilter); System.out.println("Text files:"); if (txtFiles != null) { for (String file : txtFiles) { System.out.println(" " + file); } } // Filter by type (FileFilter) FileFilter dirFilter = File::isDirectory; File[] directories = dir.listFiles(dirFilter); System.out.println("\nDirectories only:"); if (directories != null) { for (File directory : directories) { System.out.println(" " + directory.getName()); } } } } // Recursive directory traversal class DirectoryTraversal { public static void listFilesRecursively(File dir, int depth) { if (!dir.isDirectory()) { return; } File[] files = dir.listFiles(); if (files != null) { for (File file : files) { String indent = " ".repeat(depth); System.out.println(indent + file.getName()); if (file.isDirectory()) { listFilesRecursively(file, depth + 1); } } } } }

5. The Comparison & Decision Layer

MethodReturnsUse When
list()String[] (filenames)Need just names
listFiles()File[] (File objects)Need file metadata
mkdir()booleanCreate single directory
mkdirs()booleanCreate nested directories

6. The "Interview Corner" (The Edge)

The "Killer" Interview Question: "What's the difference between mkdir() and mkdirs()?" Answer: mkdir() fails if parent doesn't exist, mkdirs() creates entire path!

java
// Scenario: Create "parent/child/grandchild" // ❌ FAILS: mkdir() requires parent to exist File dir = new File("parent/child/grandchild"); dir.mkdir(); // Returns false (parent doesn't exist) // ✅ SUCCESS: mkdirs() creates entire path File dir = new File("parent/child/grandchild"); dir.mkdirs(); // Creates parent, child, and grandchild

Pro-Tip: File object != actual file:

java
// Creating File object doesn't create actual file! File file = new File("phantom.txt"); System.out.println(file.exists()); // false // Must explicitly create file.createNewFile(); // Now file exists on disk System.out.println(file.exists()); // true

File object is just a path wrapper!

Topics Covered

Java Fundamentals

Tags

#java#programming#beginner-friendly

Last Updated

2025-02-01