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
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
Top 10 Android App Development Trends | 2020 Guide
The 9 Best Programming Languages To Learn In 2020
9 Popular Cross-Platform Tools for App Development in 2019
Top Mobile App Development Trends of the Year 2019
Best Linux distros 2019: The finest open source operating systems around
20 Best iOS App Development Tutorials and Online Learning Resources
Top 15 Best Android Apps For C Programming | 2018 Exclusive
The Best 15 Mobile Game Development Platforms & Tools in 2018