Reputation: 15155
How to check the type of sdcard's filesystem?
For example, in Windows we can see NTFS, FAT32, exFAT, etc.
Thanks in advance.
Upvotes: 1
Views: 8068
Reputation: 15155
For custom path, we can use this static method:
public static String getFileSystem(File path){
try{
Process mount = Runtime.getRuntime().exec("mount");
BufferedReader reader = new BufferedReader(new InputStreamReader(mount.getInputStream()));
mount.waitFor();
String line;
while ((line = reader.readLine()) != null) {
String[] split = line.split("\\s+");
for (int i = 0; i < split.length - 1; i++){
if (!split[i].equals("/") && path.getAbsolutePath().startsWith(split[i]))
return split[i + 1];
}
}
reader.close();
mount.destroy();
}catch(IOException | InterruptedException e){
e.printStackTrace();
}
return null;
}
For example, below code:
Log.i("---", "Filesystem = "+ getFileSystem(Environment.getExternalStorageDirectory()));
will produce this output:
I/---: Filesystem = vfat
Upvotes: 2
Reputation: 24417
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:
Upvotes: 6