当前位置: 首页 > 知识库问答 >
问题:

如何在android中从文件路径中获取文件名

归星驰
2023-03-14

我想从SD卡文件路径中获取文件名。e、 g.:/storage/sdcard0/DCIM/Camera/1414240995236。jpg我想得到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);
        } 

    }

}

共有3个答案

杭泉
2023-03-14

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

String filename = uri.getLastPathSegment();
华恩
2023-03-14

获取文件名的简单方法

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

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

程祺
2023-03-14

我认为您可以使用substring方法从路径字符串中获取文件的名称。

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);
 类似资料:
  • 我只想从文件的完整路径中获取文件夹路径。 例如,我希望只得到(不包括)。 我曾经尝试过这样的事情: 但它给了我这样一个结果: 这不是我需要的结果(是)。 关于如何获取文件路径有什么想法吗?

  • 问题内容: 如何从给定的文件路径字符串获取文件名? 例如,如果我有一个文件路径字符串为 我想得到返回结果 谢谢您的帮助。 问题答案: 目标C 迅速

  • 我正试图在我的Android应用程序中导入sky.csv文件。 请帮我做这个。我试过这么多方法。然而,我没有得到任何适当的解决办法。

  • 问题内容: 我只想从完整路径到文件获取文件夹路径。 例如,我想要得到(不包括)。 我已经尝试过这样的事情: 但是它给了我这样的结果: 这不是我需要的结果(为)。 关于如何获取文件路径的任何想法? 问题答案: 您几乎可以使用该功能了。您只需要加入字符串,如下所示。 虽然,我建议使用该函数来执行此操作,但是您只需要传递字符串即可,它将为您完成工作。由于您似乎在Windows上,因此也考虑使用该功能。一

  • 问题内容: 这个问题已经在这里有了答案 : 7年前关闭。 可能重复: 使用jQuery输入文件的完整路径 我有以下html元素 如果我用 我只是文件名,而不是文件的完整绝对路径。有人可以告诉我如何获得完整路径吗? 问题答案: 您不能这样做-由于安全问题,浏览器将不允许这样做。尽管有解决方法,但事实是您不应该依靠这种方法。以下堆栈溢出问题与此处相关: 使用jquery输入文件的完整路径 如何从Fir

  • 这是另一个: 另外,我在其他片段中使uri公共静态化,以便在MainActivity中可以访问,下面是将捕获的图像加载到ImageView的代码: