How to get file name from file path in android

AndroidAndroid CameraAndroid Sdcard

Android Problem Overview


I want to get file name from sdcard file path. e.g. :/storage/sdcard0/DCIM/Camera/1414240995236.jpg I want get 1414240995236.jpg I have written the code to fetch the same but it is not working. Please help.
Below is my code:

@Override
protected void onActivityResult( int requestCode, int resultCode, Intent data)
{
	if ( requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {

		if ( resultCode == RESULT_OK) {

			/*********** Load Captured Image And Data Start ****************/

			String imageId = convertImageUriToFile( imageUri,CameraActivity);


			//  Create and excecute AsyncTask to load capture image

			new LoadImagesFromSDCard().execute(""+imageId);

			/*********** Load Captured Image And Data End ****************/


		} else if ( resultCode == RESULT_CANCELED) {

			Toast.makeText(this, " Picture was not taken ", Toast.LENGTH_SHORT).show();
		} else {

			Toast.makeText(this, " Picture was not taken ", Toast.LENGTH_SHORT).show();
		}
	}
}


/************ Convert Image Uri path to physical path **************/

public static String convertImageUriToFile ( Uri imageUri, Activity activity )  {

	Cursor cursor = null;
	int imageID = 0;

	try {

		/*********** Which columns values want to get *******/
		String [] proj={
				MediaStore.Images.Media.DATA,
				MediaStore.Images.Media._ID,
				MediaStore.Images.Thumbnails._ID,
				MediaStore.Images.ImageColumns.ORIENTATION
		};

		cursor = activity.managedQuery(

				imageUri,         //  Get data for specific image URI
				proj,             //  Which columns to return
				null,             //  WHERE clause; which rows to return (all rows)
				null,             //  WHERE clause selection arguments (none)
				null              //  Order-by clause (ascending by name)

				);

		//  Get Query Data

		int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);
		int columnIndexThumb = cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID);
		int file_ColumnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);

		//int orientation_ColumnIndex = cursor.
		//    getColumnIndexOrThrow(MediaStore.Images.ImageColumns.ORIENTATION);

		int size = cursor.getCount();

		/*******  If size is 0, there are no images on the SD Card. *****/

		if (size == 0) {


			imageDetails.setText("No Image");
		}
		else
		{

			int thumbID = 0;
			if (cursor.moveToFirst()) {

				/**************** Captured image details ************/

				/*****  Used to show image on view in LoadImagesFromSDCard class ******/
				imageID     = cursor.getInt(columnIndex);

				thumbID     = cursor.getInt(columnIndexThumb);

				String Path = cursor.getString(file_ColumnIndex);
				
				//String orientation =  cursor.getString(orientation_ColumnIndex);

				String CapturedImageDetails = " CapturedImageDetails : \n\n"
						+" ImageID :"+imageID+"\n"
						+" ThumbID :"+thumbID+"\n"
						+" Path :"+Path+"\n";
				full_path_name=Path;



       //this is my path  
       //Path :/storage/sdcard0/DCIM/Camera/1414240995236.jpg  i want get 1414240995236.jpg








				// Show Captured Image detail on activity
				imageDetails.setText(Path);

			}
		}   
	} finally {
		if (cursor != null) {
			cursor.close();
		}
	}

	// Return Captured Image ImageID ( By this ImageID Image will load from sdcard )

	return ""+imageID;
}


/**
 * Async task for loading the images from the SD card.
 *
 * @author Android Example
 *
 */

// Class with extends AsyncTask class

public class LoadImagesFromSDCard  extends AsyncTask<String, Void, Void> {

	private ProgressDialog Dialog = new ProgressDialog(CameraPhotoCapture.this);

	Bitmap mBitmap;

	protected void onPreExecute() {
		/****** NOTE: You can call UI Element here. *****/

		// Progress Dialog
		Dialog.setMessage(" Loading image from Sdcard..");
		Dialog.show();
	}


	// Call after onPreExecute method
	protected Void doInBackground(String... urls) {

		Bitmap bitmap = null;
		Bitmap newBitmap = null;
		Uri uri = null;      


		try {

			/**  Uri.withAppendedPath Method Description
			 * Parameters
			 *    baseUri  Uri to append path segment to
			 *    pathSegment  encoded path segment to append
			 * Returns
			 *    a new Uri based on baseUri with the given segment appended to the path
			 */

			uri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "" + urls[0]);

			/**************  Decode an input stream into a bitmap. *********/
			bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));

			if (bitmap != null) {

				/********* Creates a new bitmap, scaled from an existing bitmap. ***********/

				newBitmap = Bitmap.createScaledBitmap(bitmap, 170, 170, true);

				bitmap.recycle();

				if (newBitmap != null) {

					mBitmap = newBitmap;
				}
			}
		} catch (IOException e) {
			// Error fetching image, try to recover

			/********* Cancel execution of this task. **********/
			cancel(true);
		}

		return null;
	}


	protected void onPostExecute(Void unused) {

		// NOTE: You can call UI Element here.

		// Close progress dialog
		Dialog.dismiss();

		if(mBitmap != null)
		{
			// Set Image to ImageView 

			showImg.setImageBitmap(mBitmap);
		} 

	}

}

Android Solutions


Solution 1 - Android

I think you can use substring method to get name of the file from the path string.

String path=":/storage/sdcard0/DCIM/Camera/1414240995236.jpg"; 
// it contains your image path...I'm using a temp string...
String filename=path.substring(path.lastIndexOf("/")+1);

Solution 2 - Android

Simple and easy way to get File name

File file = new File("/storage/sdcard0/DCIM/Camera/1414240995236.jpg"); 
String strFileName = file.getName();

After add this code and print strFileName you will get strFileName = 1414240995236.jpg

Solution 3 - Android

The easiest solution is to use Uri.getLastPathSegment():

String filename = uri.getLastPathSegment();

Solution 4 - Android

FilenameUtils to the rescue:

String filename = FilenameUtils.getName("/storage/sdcard0/DCIM/Camera/1414240995236.jpg");

Solution 5 - Android

We can find file name below code:

File file =new File(Path);
String filename=file.getName();

Solution 6 - Android

Final working solution:

 public static String getFileName(Uri uri) {
    try {
        String path = uri.getLastPathSegment();
        return path != null ? path.substring(path.lastIndexOf("/") + 1) : "unknown";

    } catch (Exception e) {
        e.printStackTrace();
    }

    return "unknown";
}

Solution 7 - Android

Old thread but thought I would update;

 File theFile = .......
 String theName = theFile.getName();  // Get the file name
 String thePath = theFile.getAbsolutePath(); // Get the full

More info can be found here; Android File Class

Solution 8 - Android

One liner solution in kotlin assuming you have the absolute path

File(currentPhotoPath).name

Solution 9 - Android

you can use the Common IO library which can get you the Base name of your file and the Extension.

 String fileUrl=":/storage/sdcard0/DCIM/Camera/1414240995236.jpg";
      String fileName=FilenameUtils.getBaseName(fileUrl);
           String    fileExtention=FilenameUtils.getExtension(fileUrl);
//this will return filename:1414240995236 and fileExtention:jpg

Solution 10 - Android

Other Way is:

String[] parts = selectedFilePath.split("/");
    final String fileName = parts[parts.length-1];

Solution 11 - Android

add this library

  implementation group: 'commons-io', name: 'commons-io', version: '2.6'

then call FilenameUtils class

   val getFileName = FilenameUtils.getName("Your File path")

Solution 12 - Android

In kotlin:

fileUrl.split("/").last()

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionManikandan KView Question on Stackoverflow
Solution 1 - AndroidfatboyView Answer on Stackoverflow
Solution 2 - AndroidRavi MakvanaView Answer on Stackoverflow
Solution 3 - AndroidCode-ApprenticeView Answer on Stackoverflow
Solution 4 - AndroidshemView Answer on Stackoverflow
Solution 5 - AndroidManish Pratap SinghView Answer on Stackoverflow
Solution 6 - AndroidCholetskiView Answer on Stackoverflow
Solution 7 - AndroidRecycled SteelView Answer on Stackoverflow
Solution 8 - AndroidRobinView Answer on Stackoverflow
Solution 9 - AndroidAbdqr92View Answer on Stackoverflow
Solution 10 - AndroidMehdi jafariView Answer on Stackoverflow
Solution 11 - AndroidTarif ChakderView Answer on Stackoverflow
Solution 12 - AndroidMark KahnView Answer on Stackoverflow