Comment obtenir le nom de fichier à partir du fichier chemin d'accès dans android
Je veux obtenir un nom de fichier de sdcard chemin d'accès au fichier.
par exemple :/storage/sdcard0/DCIM/Camera/1414240995236.jpg I want get 1414240995236.jpg
J'ai écrit le code pour récupérer le même, mais il ne fonctionne pas. S'il vous plaît aider.
Ci-dessous mon 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);
}
}
}
Vous devez vous connecter pour publier un commentaire.
Je pense que vous pouvez utiliser substring méthode pour obtenir le nom du fichier à partir de la chaîne de chemin.
Simple et facile pour obtenir de nom de Fichier
Après ajoutez ce code et imprimer strFileName vous obtiendrez strFileName = 1414240995236.jpg
La solution la plus simple est d'utiliser Uri.getLastPathSegment():
CapturedImageDetails
?FilenameUtils
à la rescousse:Vieux thread mais pensé que je voudrais le mettre à jour;
Plus d'informations peuvent être trouvées ici; Android Fichier De Classe
vous pouvez utiliser le Commune IO bibliothèque qui peut vous obtenir le nom de Base de votre fichier et l'Extension.
Nous pouvons trouver de nom de fichier de code ci-dessous:
Autre Façon est:
Final de la solution de travail: