
- Scala - Home
- Scala - Overview
- Scala - Features
- Scala - Environment Setup
- Scala - Build Tool (SBT)
- Scala - REPL
- Scala - Dot & Dotty
- Scala - Basic Syntax
- Scala - Hello World Program
- Scala - Identifiers
- Scala - Keywords
- Scala - Comments
- Scala - Code Blocks
- Scala - Semicolon
- Scala - Constructs
- Scala - Expressions
- Scala - Input and Output
- Scala - Optional Braces
- Scala - Underscore (_)
- Data Types and Variables
- Scala - Data Types
- Scala - Type Bounds
- Scala - Context Bound
- Scala - Variances
- Scala - Type Hierarchy
- Scala - Variables
- Scala - Variable Scopes
- Scala - Literals
- Scala - Numeric Types
- Scala - Boolean Types
- Scala - Char Type
- Scala - Unit Types
- Scala - Strings
- Scala - Arrays
- Scala - Null Type
- Scala - Nothing
- Scala - Any Type
- Scala - AnyRef Type
- Scala - Unified Types
- Scala - Dates and Times
- Scala - Ranges
- Scala - Multidimensional Arrays
- Scala - WrappedArray
- Scala - StringBuilder
- Scala - String Interpolation
- Scala - StringContext
- Scala - Type Casting
- Scala var vs val
- Scala Operators
- Scala - Operators
- Scala - Rules for Operators
- Scala - Arithmetic Operators
- Scala - Relational Operators
- Scala - Logical Operators
- Scala - Bitwise Operators
- Scala - Assignment Operators
- Scala - Operators Precedence
- Scala - Symbolic Operators
- Scala - Range Operator
- Scala - String Concatenation Operator
- Scala Conditional Statements
- Scala - IF ELSE
- Scala - IF-ELSE-IF-ELSE Statement
- Scala - Nested IF-ELSE Statement
- Scala Loop Statements
- Scala - Loop Statements
- Scala - while Loop
- Scala - do-while Loop
- Scala - Nested Loops
- Scala - for Loop
- Scala - break Statement
- Scala - yield Keyword
- Scala Classes & Objects
- Scala - Classes & Objects
- Scala - Constructors
- Scala - Auxiliary Constructor
- Scala - Primary Constructor
- Scala - This Keyword
- Scala - Nested Classes
- Scala - Getters and Setters
- Scala - Object Private Fields
- Scala - Singleton Object
- Scala - Companion Objects
- Scala - Creating Executable Programs
- Scala - Stateful Object
- Scala - Enumerations
- Scala - Polymorphism
- Scala - Access Modifiers
- Scala - Apply Method
- Scala - Update Methods
- Scala - UnapplySeq Method
- Scala - Inheritance
- Scala - Extending a Class
- Scala - Method Overloading
- Scala - Method Overriding
- Scala - Generic Classes
- Scala - Generic Functions
- Scala - Superclass Construction
- Scala Methods & Functions
- Scala - Methods
- Scala - Functions
- Scala - Methods vs Functions
- Scala - Main Methods
- Scala - Functions Call-by-Name
- Scala - Functions with Named Arguments
- Scala - Function with Variable Arguments
- Scala - Recursion Functions
- Scala - Default Parameter Values
- Scala - Functions without Parameters
- Scala - Implicit Parameters
- Scala - Higher-Order Functions
- Scala - Nested Functions
- Scala - Extension Methods
- Scala - Anonymous Functions
- Partially Applied Functions
- Scala - Lazy Val
- Scala - Pure Function
- Scala - Currying Functions
- Scala - Control Abstractions
- Scala - Corecursion
- Scala - Unfold
- Scala - Tail Recursion
- Scala - Infinite Sequences
- Scala - Dynamic Invocation
- Scala - Lambda Expressions
- Scala - Polymorphic Functions
- Scala Collections
- Scala - Collections
- Mutable and Immutable Collections
- Scala - Lists
- Scala - Sets
- Scala - Maps
- Scala - TreeMap
- Scala - SortedMap
- Scala - Tuples
- Scala - Iterators
- Scala - Options
- Scala - NumericRange
- Scala - Infinite Streams
- Scala - Parallel Collections
- Scala Advanced Types
- Scala - Union Types
- Scala - Intersection Types
- Scala - Type Aliases
- Scala - Structural Types
- Scala - Match Expression
- Scala - Singleton Type Operator
- Scala - Abstract Types
- Scala - Dependent Types
- Scala - Abstract Type Bounds
- Scala - Higher-Kinded Types
- Scala - Opaque Type Alias
- Scala - Path-Dependent Types
- Scala - Type Lambdas
- Scala - Type Inference
- Scala - Algebraic Data Types
- Scala Pattern Matching
- Scala - Pattern Matching
- Scala - Guards
- Scala - Variables in Patterns
- Scala - Type Patterns
- Scala - The Matchable Trait
- Scala - Matching Arrays
- Scala - Matching Lists
- Scala - Matching Tuples
- Scala - Exception Handling
- Scala - Extractors
- Scala - Pattern Bindings
- Scala - Regular Expressions
- Scala - Case Classes
- Scala - Partial Functions
- Scala - Packaging and Imports
- Scala - Implicit Imports
- Scala - Export Clauses
- Scala - Nested Packages
- Scala - Chained Packages
- Scala - Package Objects
- Scala Files I/O
- Scala - Files I/O
- Scala - Writing Files
- Scala - Listing Files
- Scala - Deleting Directories
- Scala - Check File Exists
- Scala Advanced Concepts
- Scala - Closures
- Scala - Futures
- Scala - Promises
- Scala - Traits
- Scala - Trait Mixins
- Scala - Layered Traits
- Scala - Trait Linearization
- Scala - Sealed Traits
- Scala - Transparent Traits
- Scala - Process Management
- Scala - Scaladoc
- Scala - Literal Type Arithmetic
- Scala - Inline keyword
- Scala - Def, Var & Val
- Scala - Dropped Features
- Scala Unit Testing
- Scala - Unit Testing
- Scala - uTest
- Scala - MUnit
- Scala - ScalaTest Runner
- Scala - ScalaMock
- Scala - JUnit
- Scala - Mocking
- Scala - BDD Testing
Scala - Deleting a Directory
Scala is open to make use of any Java objects and java.io.File is one of the objects which can be used in Scala programming to read, write, delete files and directories, etc.
Deleting a Directory
Deleting a directory in Scala can be done similarly to deleting a file. However, the directory must be empty to be deleted using the delete method.
Example
Following is the example which shows you how to delete an empty directory named testDir −
import java.io._ object Demo { def main(args: Array[String]) = { val directory = new File("testDir") if (directory.delete()) { println("Directory deleted successfully") } else { println("Failed to delete the directory") } } }
Save the above program in Demo.scala. Use the following commands to compile and execute this program.
Command
> scalac Demo.scala > scala Demo
Output
The above code will attempt to delete the directory testDir. If the directory is empty and is deleted successfully, it will print "Directory deleted successfully". If the directory is not empty or the deletion fails for some reason, it will print "Failed to delete the directory".
This will produce the following result -
Directory deleted successfully
Deleting Non-Empty Directory
To delete a non-empty directory, you need to first delete all the files and subdirectories inside it.
Example
Following is the example which shows you how to delete a non-empty directory named nonEmptyDir −
import java.io._ object Demo { def main(args: Array[String]) = { val directory = new File("nonEmptyDir") if (deleteDirectory(directory)) { println("Non-empty directory deleted successfully") } else { println("Failed to delete the non-empty directory") } } def deleteDirectory(directory: File): Boolean = { if (directory.isDirectory) { val children = directory.list() if (children != null) { for (child <- children) { val success = deleteDirectory(new File(directory, child)) if (!success) { return false } } } } directory.delete() } }
Save the above program in Demo.scala. Use the following commands to compile and execute this program.
Command
> scalac Demo.scala > scala Demo
Output
The above code will attempt to delete the directory nonEmptyDir and all its contents. If the directory and all its contents are deleted successfully, it will print "Non-empty directory deleted successfully". If the deletion fails for some reason, it will print "Failed to delete the non-empty directory".
This will produce the following result -
Non-empty directory deleted successfully
Deleting Directories with Wildcards
You can delete multiple directories matching a certain pattern using wildcards.
Example
Following is the example which shows you how to delete all directories that start with tempDir −
import java.io._ object Demo { def main(args: Array[String]) = { val directory = new File(".") val tempDirs = directory.listFiles(new FilenameFilter { def accept(dir: File, name: String): Boolean = name.startsWith("tempDir") && new File(dir, name).isDirectory }) if (tempDirs != null) { for (dir <- tempDirs) { if (deleteDirectory(dir)) { println(s"Directory ${dir.getName} deleted successfully") } else { println(s"Failed to delete directory ${dir.getName}") } } } } def deleteDirectory(directory: File): Boolean = { if (directory.isDirectory) { val children = directory.list() if (children != null) { for (child <- children) { val success = deleteDirectory(new File(directory, child)) if (!success) { return false } } } } directory.delete() } }
Save the above program in Demo.scala. Use the following commands to compile and execute this program.
Command
> scalac Demo.scala > scala Demo
Output
The above code will attempt to delete all directories starting with tempDir in the current directory. For each directory, it will print either "Directory dirname deleted successfully" if the deletion succeeds, and "Failed to delete directory dirname" if the deletion fails.
This will produce the following result -
Directory tempDir1 deleted successfully Directory tempDir2 deleted successfully
Handling Exceptions When Deleting Directories
When working with file operations, it is important to handle exceptions like SecurityException to make your code more robust.
Example
Following is the example which shows you how to handle exceptions when deleting a directory −
import java.io._ object Demo { def main(args: Array[String]) = { try { val directory = new File("testDir") if (directory.delete()) { println("Directory deleted successfully") } else { println("Failed to delete the directory") } } catch { case ex: SecurityException => println("Permission denied: " + ex.getMessage) case ex: IOException => println("An IO error occurred: " + ex.getMessage) } } }
Save the above program in Demo.scala. Use the following commands to compile and execute this program.
Command
> scalac Demo.scala > scala Demo
Output
If an error occurs, the program will print an appropriate error message.
This will produce the following result -
Permission denied: [error message]