【问题标题】:android Reading all the Directories in SDCARD which has imagesandroid读取SDCARD中包含图像的所有目录
【发布时间】:2011-09-26 15:41:46
【问题描述】:

我正在尝试读取 SDCARD 中的所有图像及其所在目录。例如:如果 /mnt/sdcard/album1 中有文件 TEST.jpg 和 /mnt/sdcard/album1/album2 中有 TEST2.jpg 文件,我应该能够获得目录名称专辑 1 和专辑 2。 我已经编写了一个以递归方式执行此操作的代码,这在文件夹数量较少但目录数量增加时才有效。

      public void getImageFoldes(String filepath){


            String albumpath;
            File file = new File(filepath);

    File[] files = file.listFiles();
    for (int fileInList = 0; fileInList < files.length; fileInList++)  
    {
        File filename;
        filename =files[fileInList];

        if(filename.isHidden()|| filename.toString().startsWith("."))
            return;

        if (filename.isDirectory()){

            albumpath = filename.toString();
            String[] split;
            String title;
            split= albumpath.split("/");
            title=split[split.length-1];
            result = new thumbnailResults();
            result.setTitle(title);
            result.setPath(albumpath);
            result.setIsLocal(true);
            //result.setCreated("05-06-2011");
            getImageFoldes(filename.toString());
        }
        else{
            if (files.length !=0)
            {
                //if File is the image file then store the album name 
                if ((files[fileInList].toString()).contains(".png")||
                        (files[fileInList].toString()).contains(".jpg")||
                        (files[fileInList].toString()).contains(".jpeg")){
                    if (!results.contains(result)){
                        result.setUri(Uri.parse(files[fileInList].getPath()));
                        results.add(result);
                        myadapter.notifyDataSetChanged();

                    }
                }       
            }
        }
    }
}

【问题讨论】:

    标签: android directory sd-card


    【解决方案1】:

    使用以下代码。 从 sdcard 中获取所有图像和目录的路径。

    public static ArrayList<String> getPathOfAllImages(Activity activity) {
            ArrayList<String> absolutePathOfImageList = new ArrayList<String>();
            String absolutePathOfImage = null;
            String nameOfFile = null;
            String absolutePathOfFileWithoutFileName = null;
            Uri uri;
            Cursor cursor;
            int column_index;
            int column_displayname;
            int lastIndex;
            // absolutePathOfImages.clear();
    
    
                uri = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
    
                String[] projection = { MediaColumns.DATA,
                        MediaColumns.DISPLAY_NAME };
    
                cursor = activity.managedQuery(uri, projection, null, null, null);
                column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA);
    
                column_displayname = cursor
                        .getColumnIndexOrThrow(MediaColumns.DISPLAY_NAME);
    
                // cursor.moveToFirst();
                while (cursor.moveToNext()) {
                    // for(int i=0; i<cursor.getColumnCount();i++){
                    // Log.i(TAG,cursor.getColumnName(i)+".....Data Present ...."+cursor.getString(i));
                    // }
                    // Log.i(TAG,"=====================================");
    
                    absolutePathOfImage = cursor.getString(column_index);
                    nameOfFile = cursor.getString(column_displayname);
    
                    lastIndex = absolutePathOfImage.lastIndexOf(nameOfFile);
    
                    lastIndex = lastIndex >= 0 ? lastIndex
                            : nameOfFile.length() - 1;
    
                    absolutePathOfFileWithoutFileName = absolutePathOfImage
                            .substring(0, lastIndex);
    
    
                        if (absolutePathOfImage != null) {
                            absolutePathOfImageList.add(absolutePathOfImage);
                        }
    
                }
    
    
            // Log.i(TAG,"........Detected images for Grid....."
            // + absolutePathOfImageList);
            return absolutePathOfImageList;
        }
    

    【讨论】:

    • sahoo:它给了我 JPEG 文件的确切文件路径。我需要的只是目录的路径。假设我有一个文件夹 /mnt/sdcard/album1/album2/test.jpg 和 /mnt/sdcard/album3/test1.jpg 那么我的结果应该是包含第一个值的字符串数组列表 /man/sdcard/album1/album2 和第二个条目是 /mnt/sdcard/album3。为什么它不搜索 DCIM 文件夹?
    【解决方案2】:

    要从 SD 卡中获取所有图像文件,它可能会起作用。

    public class ReadallImagesActivity extends Activity {
    
        ArrayList<String> arlist = new ArrayList<String>();
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            File ff = Environment.getExternalStorageDirectory();
            loadImagepaths(ff);
            setContentView(R.layout.main);
            Toast.makeText(ReadallImagesActivity.this, "Array size == " +arlist.size(), Toast.LENGTH_LONG).show();
        }
    
        public void loadImagepaths(File file) {
            for (File f : file.listFiles()) {
    
                if (f.isDirectory()) {
                    if (f.getAbsolutePath().endsWith(".android_secure")) {
                        break;
                    }
                    if (f.getAbsolutePath().endsWith("DCIM")) {
                        continue;
                    }
                    loadImagepaths(f);
                } else {
                    if (f.getAbsolutePath().endsWith(".png") ||
                        f.getAbsolutePath().endsWith(".gif") ||
                        f.getAbsolutePath().endsWith(".jpg"))
                    {
                        arlist.add(f.getAbsolutePath());
                    }
                }   
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      • 1970-01-01
      • 2011-03-04
      相关资源
      最近更新 更多