Sort The File In File Explorer By Implementing Comparator in Android Development

In the previous example of our file explorer, the files listed not in order. To list it in order, we have to implement our own custom comparator.

This example shows how you can sort and display list of files on your storage media by implementing comparator.

Algorithm:

1.) Create a new project by File-> New -> Android Project name it FileComparator.

2.) Write following permissions into android manifest.xml:

 

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

 

 

3.) Run for output.

Steps:

1.) Create a project named FileComparator and set the information as stated in the image.

Build Target: Android 4.4
Application Name: FileComparator
Package Name: com.example. FileComparator
Activity Name: FileComparatorActivity

filecomp1

2.) Open FileComparatorActivity.java file and write following code there:

 

package com.example.filecomparator;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Stack;

import android.app.ListActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.webkit.MimeTypeMap;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class FileComparatorActivity extends ListActivity {

private List<String> fileList = new ArrayList<String>();

Stack<File> history;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

history = new Stack<File>();

File root = new File(Environment
.getExternalStorageDirectory()
.getAbsolutePath());
ListDir(root);

}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
File selected = new File(fileList.get(position));
if(selected.isDirectory()){
ListDir(selected);
}else {
Uri selectedUri = Uri.fromFile(selected);
String fileExtension
= MimeTypeMap.getFileExtensionFromUrl(selectedUri.toString());
String mimeType
= MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExtension);

Toast.makeText(FileComparatorActivity.this,
"FileExtension: " + fileExtension + "n" +
"MimeType: " + mimeType,
Toast.LENGTH_LONG).show();

Intent intent;
intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(selectedUri, mimeType);
startActivity(intent);

}
}

void ListDir(File f){

history.push(f);

File[] files = f.listFiles();

Arrays.sort(files, filecomparator);

fileList.clear();
for (File file : files){
fileList.add(file.getPath());
}

ArrayAdapter<String> directoryList
= new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, fileList);
setListAdapter(directoryList);
}

Comparator<? super File> filecomparator = new Comparator<File>(){
public int compare(File file1, File file2) {
return String.valueOf(file1.getName()).compareTo(file2.getName());
}
};

@Override
public void onBackPressed() {
// TODO Auto-generated method stub

history.pop(); //remove current directory

if(history.empty()){
super.onBackPressed();
}else{
File selected = history.pop(); //Get the File on Top of history
ListDir(selected);
}
}
}

 

3.) Compile and build the project.

Output

filecomp2