2014-10-26 26 views
31

Voglio ottenere il nome del file dal percorso del file sdcard. ad es. : /storage/sdcard0/DCIM/Camera/1414240995236.jpg I want get 1414240995236.jpg Ho scritto il codice per recuperare lo stesso ma non funziona. Per favore aiuto.
Qui di seguito è il mio codice:Come ottenere il nome del file dal percorso del file in Android

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

    } 

} 

risposta

106

penso che è possibile utilizzare stringa methode per ottenere il nome del file dal stringa di percorso.

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); 
+0

Grazie amico il suo lavoro ... –

+0

funziona correttamente. –

+8

Penso che dovresti usare File.separator invece di "/" –

26

La soluzione più semplice è quello di utilizzare Uri.getLastPathSegment():

String filename = uri.getLastPathSegment(); 
+0

@manimcaAndroidDeveloper Assicurati di mostrare la vostra gratitudine con un upvote e accettare la mia risposta (quando il timer si esaurisce). –

+0

ya sicuro. ma non riesco a ottenere il nome del file. ho una risposta come questa /storage/sdcard/DCIM/Camera/1414302043784.jpg –

+0

@manimcaAndroidDeveloper Qual è il codice esatto che fornisce quel risultato? –

0

è possibile utilizzare la libreria Common IO che si può ottenere il nome di base del file e l'estensione.

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 
+0

Sfortunatamente, durante il runtime molte persone ottengono questo: "java.lang.NoClassDefFoundError: Risoluzione fallita di: Lorg/apache/comuni/IO/FilenameUtils;" –

23

modo semplice e veloce per ottenere il nome del file

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

Dopo aggiungere questo codice e stampare strFileName si vuole ottenere strFileName = 1414240995236.jpg

+0

Grazie, Ravi! – ORY

+0

benvenuto @ORY –

2

Vecchio thread, ma ho pensato di aggiornare;

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

Ulteriori informazioni possono essere trovate qui; Android File Class

+0

Ho perso il post di Rv Panchal, lo ho sviato. –

3

FilenameUtils in soccorso:

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

Possiamo trovare il nome del file di codice di seguito:

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