When developing Android apps with Kotlin, one of the most common runtime issues developers encounter is the FileNotFoundException. This exception typically appears when the app tries to access a file that does not exist in the expected directory or when incorrect file handling methods are used. In this article, we will explore what Kotlin File Not Found Exception in Android means, why it occurs, and how to fix it with real examples.

What is FileNotFoundException?
A FileNotFoundException
is a subclass of IOException
. It is thrown when an attempt to open a file with the specified pathname has failed. In Android development, this often happens because the file path is incorrect, the file is missing, or the app does not have the necessary permissions to access storage.
Common Causes of FileNot Found Exception in Android
- Incorrect file path or filename.
- File not present in the specified directory.
- Storage permission not granted (READ/WRITE).
- Accessing internal files with external storage methods.
- Trying to read a file before it is created.
Example 1: Reading a File from Internal Storage
Consider the following Kotlin code where a developer tries to read a text file from internal storage:
val fileName = "sample.txt" try { val fileInputStream = openFileInput(fileName) val content = fileInputStream.bufferedReader().use { it.readText() } println("File Content: $content") } catch (e: FileNotFoundException) { e.printStackTrace() }
In this case, if sample.txt
does not exist in the internal storage directory of the app, the code will throw a FileNotFoundException
. To prevent this, ensure the file is created first.
Example 2: Writing a File Before Reading
val fileName = "sample.txt" val fileContent = "Hello, this is a sample text!" // Writing the file openFileOutput(fileName, MODE_PRIVATE).use { it.write(fileContent.toByteArray()) } // Now read the file safely val fileInputStream = openFileInput(fileName) val content = fileInputStream.bufferedReader().use { it.readText() } println("File Content: $content")
By first writing the file, we ensure that the file exists before attempting to read it, thereby avoiding Kotlin File Not Found Exception in Android
.
Example 3: Handling Files in External Storage
When dealing with external storage, you must request runtime permissions. Without proper permission, your app will crash with a FileNotFoundException
.
val file = File(getExternalFilesDir(null), "external_sample.txt") try { // Write to file file.writeText("External storage file content!") // Read from file val content = file.readText() println("External File Content: $content") } catch (e: FileNotFoundException) { e.printStackTrace() }
Always add the required permission in AndroidManifest.xml
:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
And request permissions at runtime using ActivityCompat.requestPermissions()
.
Best Practices to Avoid File Not Found Exception
- Always check if a file exists before reading it.
- Create the file before trying to access its content.
- Handle exceptions gracefully with
try-catch
. - Use
context.filesDir
for internal storage handling. - Request runtime permissions for external storage access.
Comparison: Internal vs External Storage in Android
Feature | Internal Storage | External Storage |
---|---|---|
Accessibility | Private to the app | Shared with other apps |
Permission Required | No | Yes (runtime permissions) |
Security | More secure | Less secure |
Use Case | Config, cache, user data | Media files, documents |
Conclusion
The Kotlin File Not Found Exception in Android is a common but easily avoidable issue. By understanding the causes, handling file operations properly, and implementing best practices, developers can ensure smooth file handling in their Android apps. Always remember to verify the file path, manage permissions, and create files before reading them.
For further reading on Android data storage, you can refer to the official Android documentation.