1

重複の可能性:
エミュレーターの SD カードからすべての写真を取得し、listView に表示するにはどうすればよいですか?

SDカードの下に非常に多くのフォルダーがあります。各フォルダには、画像ファイル、テキスト ファイル、およびサブ フォルダが含まれます。SDカードの下のすべてのフォルダとサブフォルダで利用可能なすべての画像ファイルを取得するにはどうすればよいですか? すべての画像ファイル パスを 1 つの配列に格納する必要があります。誰でも私を助けてください。

4

1 に答える 1

9

以下のコードを使用して、SDカードからすべての画像を検索できます。

            private String SD_CARD_ROOT;
            File mFile=Environment.getExternalStorageDirectory();
    SD_CARD_ROOT=mFile.toString();


private List<String> FindFiles() {
    final List<String> tFileList = new ArrayList<String>();
    Resources resources = getResources();
    // array of valid image file extensions
    String[] imageTypes = resources.getStringArray(R.array.image);
    FilenameFilter[] filter = new FilenameFilter[imageTypes.length];

    int i = 0;
    for (final String type : imageTypes) {
        filter[i] = new FilenameFilter() {
            public boolean accept(File dir, String name) {
                return name.endsWith("." + type);
            }
        };
        i++;
    }

    FileUtils fileUtils = new FileUtils();
    File[] allMatchingFiles = fileUtils.listFilesAsArray(
            new File(SD_CARD_ROOT), filter, -1);
    for (File f : allMatchingFiles) {
        tFileList.add(f.getAbsolutePath());
    }
    return tFileList;
}

画像タイプのリソース配列:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="image">
<item>bmp</item>
<item>cmx</item>
<item>cod</item>
<item>gif</item>
<item>ico</item>
<item>ief</item>
<item>jpe</item>
<item>jpeg</item>
<item>jpg</item>
<item>jfif</item>
<item>pbm</item>
<item>pgm</item>
<item>png</item>
<item>pnm</item>
<item>ppm</item>
<item>ras</item>
<item>rgb</item>
<item>svg</item>
<item>tif</item>
<item>tiff</item>
<item>xbm</item>
<item>xpm</item>
<item>xwd</item>
</string-array>
</resources>

これが画像の検索に役立つことを願っています。

ここにクラスがありません

public class FileUtils {

        public void saveArray(String filename, List<String> output_field) {
             try {
                FileOutputStream fos = new FileOutputStream(filename);
                GZIPOutputStream gzos = new GZIPOutputStream(fos);
                ObjectOutputStream out = new ObjectOutputStream(gzos);
                out.writeObject(output_field);
                out.flush();
                out.close();
             }
             catch (IOException e) {
                 e.getStackTrace(); 
             }
          }

          @SuppressWarnings("unchecked")
        public List<String> loadArray(String filename) {
              try {
                FileInputStream fis = new FileInputStream(filename);
                GZIPInputStream gzis = new GZIPInputStream(fis);
                ObjectInputStream in = new ObjectInputStream(gzis);
                List<String> read_field = (List<String>)in.readObject();
                in.close();
                return read_field;
              }
              catch (Exception e) {
                  e.getStackTrace();
              }
              return null;
          }

        public File[] listFilesAsArray(File directory, FilenameFilter[] filter,
                int recurse) {
            Collection<File> files = listFiles(directory, filter, recurse);

            File[] arr = new File[files.size()];
            return files.toArray(arr);
        }

        public Collection<File> listFiles(File directory,
                FilenameFilter[] filter, int recurse) {

            Vector<File> files = new Vector<File>();

            File[] entries = directory.listFiles();

            if (entries != null) {
                for (File entry : entries) {
                    for (FilenameFilter filefilter : filter) {
                        if (filter == null
                                || filefilter
                                        .accept(directory, entry.getName())) {
                            files.add(entry);
                            Log.v("ImageViewFlipper", "Added: "
                                    + entry.getName());
                        }
                    }
                    if ((recurse <= -1) || (recurse > 0 && entry.isDirectory())) {
                        recurse--;
                        files.addAll(listFiles(entry, filter, recurse));
                        recurse++;
                    }
                }
            }
            return files;
        }
    }
于 2012-04-30T09:49:41.800 に答える