从拾取的文件/图像中获取文件名的最佳方法

时间:2014-01-24 12:21:36

标签: android image uri filepath

我在这里和那里看到的大多数提示用户选择文件或图像的代码片段,让 onActivityResult方法使用类似下面的函数来获取所选的文件路径。

我的问题是为什么要经历这一切,当Uri准备好使用函数 Uri.getPath()时?在一种方法或另一种方法中是否存在优点或缺点?

onActivityResult代码

   Uri source = data.getData();
   String fileName=getRealPathFromURI(this, source);

获取路径功能

   public static String getRealPathFromURI(Context context, Uri contentUri) {
          Cursor cursor = null;
          try { 
            String[] proj = { MediaStore.Images.Media.DATA };
            cursor = context.getContentResolver().query(contentUri,  proj, null, null, null);
            int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
          } finally {
            if (cursor != null) {
              cursor.close();
            }
          }
    }

当我从dropbox中选择文件/图像时,我实际上使用getRealPathMethod使我的应用程序崩溃...而使用Uri.getPath()方法我没有任何问题。那么......这里的交易是什么?我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

尝试这样

final String [] consDirNames  = new String[constDir.length];
        // directory names 
        for(int i=0;i<constDir.length;i++){

            consDirNames[i]=constDir[i].getName();
                    File booths[]=        constDir[i].listFiles(new FileFilter() {
                        @Override
                        public boolean accept(File pathname) {
                            // TODO Auto-generated method stub
                            return pathname.getName().endsWith(".pdf");
                        }
                });    ;
        consDirMap.put(consDirNames[i], booths);
        fileMap.put(consDirNames[i],constDir[i].getAbsolutePath() );
    }