如何从android中的文件path获取文件名

我想从SD卡文件path获取文件名。 例如: /storage/sdcard0/DCIM/Camera/1414240995236.jpg I want get 1414240995236.jpg我已经写了代码来获取相同,但它不工作。 请帮忙。
以下是我的代码:

 @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); } } } 

Solutions Collecting From Web of "如何从android中的文件path获取文件名"

我想你可以使用子string方法从pathstring中获取文件的名称。

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

最简单的解决scheme是使用Uri.getLastPathSegment() :

 String filename = uri.getLastPathSegment(); 

简单和容易的方法来获取文件名

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

添加此代码并打印strFileName后,您将获得strFileName = 1414240995236.jpg

老线程,但认为我会更新;

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

更多信息可以在这里find; Android文件类

FilenameUtils来拯救:

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

你可以使用Common IO库,它可以得到你的文件和扩展名的基本名称。

  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