What Is Android's File System

What file system does Android use?

Android originally used YAFFS2 as the file system. After Android 2.3, the file system became ext4.

YAFFS2 is usually used for NAND flash in embedded systems such as mobile phones. It includes wear-leveling and a GC mechanism specifically for NAND flash, but it is only single-threaded.

According to an ARS Technica article, the reason that Android switched to ext4 from YAFFS2 for its file system is because YAFFS2 is single-threaded, and "would likely have been a bottleneck on dual-core systems." Android, even back in 2010 was looking forward when many cores could be used in Smartphones. Looking back, it was obvious that this was the right decision. Smartphones went to Dual Core around the time of Galaxy S2. More recently most Smart Phones are released in Quad-Core configuration, with 6 and 8 core configurations on the horizon.

Confused about file system on android devices

You can learn more about saving files on the android developer site.

http://developer.android.com/training/basics/data-storage/files.html

Where is the data file on the android file system?

openFileOutput returns a location not accessible trough file explorer. It should be /data/data/yourpackagename

How do I check the type of sdcard's filesystem?

One solution is to run the mount command then do some string processing on the result:

    try{
Process mount = Runtime.getRuntime().exec("mount");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(mount.getInputStream()));
mount.waitFor();

String extPath = Environment.getExternalStorageDirectory().getAbsolutePath();
String line;
while ((line = bufferedReader.readLine()) != null)
{
String[] split = line.split("\\s+");
for(int i = 0; i < split.length - 1; i++)
{
if(split[i].contentEquals(extPath) ||
split[i].contains("sdcard") ||
split[i].contains("_sd") ||
split[i].contains("extSd") ||
split[i].contains("_SD")) // Add wildcards to match against here
{
String strMount = split[i];
String strFileSystem = split[i+1];

// Add to a list/array of mount points and file systems here...
Log.i("SDCard", "mount point: "+ strMount + " file system: " + strFileSystem);
}
}
}
}catch(IOException e){
e.printStackTrace();
}catch(InterruptedException e){
e.printStackTrace();
}

Running this on my G Pro gave me the following results:

mount point: /mnt/media_rw/external_SD file system: vfat
mount point: /storage/external_SD file system: fuse

Some common Android file system types:

  • yaffs/yaffs2 - Yet Another Flash File System
  • ext4 - Extended File System version 4
  • fuse - File System in User Space
  • tmpfs - Temporary File System
  • vfat - FAT file system extension

How do I navigate the external storage file system in Android 12?

Given this, how can I navigate all the files on the device, starting from the root directory?

You can't, at least on unrooted devices. Even with MANAGE_EXTERNAL_STORAGE, all that you have access to is external storage, not the entire device filesystem.

Use Environment.getExternalStorageDirectory() — This works, but is deprecated in API level 31.

It is now undeprecated, as of Android 12L and Android 13 DP2. Hopefully the public documentation will reflect this when Android 13 ships later this year.

Use android:requestLegacyExternalStorage="true" — This is outdated.

You still want it for Android 10 support.



Related Topics



Leave a reply



Submit