Monday, 20 January 2014

Android Storage system to access the path of External and Internal files and folders.


Android uses more than one file system (think of "multiple drives/partitions" when comparing with your computer, while sharing a common base, directory structures might differ between manufacturers.


What is a file system?

            A file system (or filesystem) is an abstraction to store, retrieve and update a set of files. The term also identifies the data structures specified by some of those abstractions, which are designed to organize multiple files as a single stream of bytes, and the network protocols specified by some other of those abstractions, which are designed to allow files on a remote machine to be accessed.


Android supports different file systems:
  • FAT: Used mainly for SDCards. This system is supported by most operating systems (Windows, Linux, Mac, etc.), which is why it's used for these "exchangeables". But it is also quite restricted, which is why it is rarely used somewhere else.
  • exFAT: sometimes used instead of FAT -- but not generally supported
  • extfs: The extended file system already has seen several generations. Android devices usually support ext2, ext3, and in most cases also ext4.
  • YAFFS: A Log structured file system designed for NAND flash, but also used with NOR flash. This was often used for e.g. the /data partition with many devices up to Android 2.x

There are also some pseudo-filesystems used on Unix/Linux system in general and on Android devices in special:
  • devfs: Virtual file system for managing devices on-the-fly
  • procfs: Pseudo-file system, used to access kernel information about processes
  • sysfs: Virtual file system holding information about buses, devices, firmware, filesystems, etc.


Internal storage of Android devices is devided into several partitions, each dedicated to a special "task". 

Some of the more important ones include:

/system: This is where the Android system and the pre-installed apps reside. It usually is mounted read-only, so on non-rooted devices you cannot write here (with the exception of applying a system update, e.g. OTA, or flashing a new ROM)

/data: Here the downloaded apps and all app's data are located. Additionally, some system settings are stored here, log files, and more

Your sdcard usually has a single partition only -- but also could be split into multiple partitions. 

Below are some of the ways i am showing you to access the various files and folders in android file system:

System directories
Method
Result
Environment.getDataDirectory()
/data
Environment.getDownloadCacheDirectory()
/cache
Environment.getRootDirectory()
/system
External storage directories
Method
Result
Environment.getExternalStorageDirectory()
/storage/sdcard0
Environment.getExternalStoragePublicDirectory(DIRECTORY_ALARMS)
/storage/sdcard0/Alarms
Environment.getExternalStoragePublicDirectory(DIRECTORY_DCIM)
/storage/sdcard0/DCIM
Environment.getExternalStoragePublicDirectory(DIRECTORY_DOWNLOADS)
/storage/sdcard0/Download
Environment.getExternalStoragePublicDirectory(DIRECTORY_MOVIES)
/storage/sdcard0/Movies
Environment.getExternalStoragePublicDirectory(DIRECTORY_MUSIC)
/storage/sdcard0/Music
Environment.getExternalStoragePublicDirectory(DIRECTORY_NOTIFICATIONS)
/storage/sdcard0/Notifications
Environment.getExternalStoragePublicDirectory(DIRECTORY_PICTURES)
/storage/sdcard0/Pictures
Environment.getExternalStoragePublicDirectory(DIRECTORY_PODCASTS)
/storage/sdcard0/Podcasts
Environment.getExternalStoragePublicDirectory(DIRECTORY_RINGTONES)
/storage/sdcard0/Ringtones

Application directories
Method
Result
getCacheDir()
/data/data/package/cache
getFilesDir()
/data/data/package/files
getFilesDir().getParent()
/data/data/package
Application External storage directories
Method
Result
getExternalCacheDir()
/storage/sdcard0/Android/data/package/cache
getExternalFilesDir(null)
/storage/sdcard0/Android/data/package/files
getExternalFilesDir(DIRECTORY_ALARMS)
/storage/sdcard0/Android/data/package/files/Alarms
getExternalFilesDir(DIRECTORY_DCIM)
/storage/sdcard0/Android/data/package/files/DCIM
getExternalFilesDir(DIRECTORY_DOWNLOADS)
/storage/sdcard0/Android/data/package/files/Download
getExternalFilesDir(DIRECTORY_MOVIES)
/storage/sdcard0/Android/data/package/files/Movies
getExternalFilesDir(DIRECTORY_MUSIC)
/storage/sdcard0/Android/data/package/files/Music
getExternalFilesDir(DIRECTORY_NOTIFICATIONS)
/storage/sdcard0/Android/data/package/files/Notifications
getExternalFilesDir(DIRECTORY_PICTURES)
/storage/sdcard0/Android/data/package/files/Pictures
getExternalFilesDir(DIRECTORY_PODCASTS)
/storage/sdcard0/Android/data/package/files/Podcasts
getExternalFilesDir(DIRECTORY_RINGTONES)
/storage/sdcard0/Android/data/package/files/Ringtones


Thanks.

6 comments: