0

可能重复:
在 Java 中递归列出文件

我在 sdcard 中创建了一个名为 SlideShow 的文件夹。在这个文件夹中,我创建了两个文件夹,即文件夹 1 和文件夹 2。这两个文件夹进一步分为两个子文件夹。我正在将画廊中的一些图像保存到这些子文件夹中。

有人建议我如何列出 SlideShow 文件夹中的所有图像,包括文件夹和子文件夹?

4

2 回答 2

1

我认为你可以像这样使用递归函数:你可以通过这个例子获得帮助

public List<String> images=new ArrayList<String>();        

public recursiveFunction(File dirPath) {
    File f = new File(dirPath);
    File[] files = f.listFiles();

    for(int i=0;i,**files.length - 1**;i++)
    {
        if(files[position].isFile())
        {
          int mid= files[position].getName().lastIndexOf(".");
          String ext=files[position].getName().substring(mid+1,files[position].getName().length()); 

          if(   ext.equalsIgnoreCase("jpg")
             || ext.equalsIgnoreCase("png")
             || ext.equalsIgnoreCase("jpeg")
             || ext.equalsIgnoreCase("gif"))
          {
            images.add(files[position].getAbsoluteFile();
          }
        }
        else 
          recursiveFunction(files[position].getAbsoluteFile());
    }
  }

在图像列表中,您拥有所有图像。

于 2011-12-13T13:11:08.557 回答
0

尝试使用以下代码从 SlideShow 文件夹及其子文件夹中获取所有图像

public static ArrayList<String> getPathOfAllImages(Activity activity) {
        trimCache();
        String absolutePathOfImage = null;
        String nameOfFile = null;
        String absolutePathOfFileWithoutFileName = null;
        Uri uri;
        Cursor cursor;
        int column_index;
        int column_displayname;
        int lastIndex;
        // absolutePathOfImages.clear();
        ArrayList<String> absolutePathOfImageList = new ArrayList<String>();
        if (absolutePathOfImageList.isEmpty()) {
            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 (!((absolutePathOfFileWithoutFileName.equals(Environment
                        .getExternalStorageDirectory() + "/SlideShow/")))) {
                    if (absolutePathOfImage != null) {
                        absolutePathOfImageList.add(absolutePathOfImage);
                    }
                }
            }

        }
        // Log.i(TAG,"........Detected images for Grid....."
        // + absolutePathOfImageList);
        return absolutePathOfImageList;
    }
于 2011-12-13T13:09:28.887 回答