2012-04-30 5 views
1

可能性の重複:
How to get all the pictures from the sdcard of emulator and display it in a listView?すべての画像ファイルをAndroidでsdcardで入手するには?

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

+2

http://stackoverflow.com/q/7303943/603744が不足しています。これは役に立ちそうです –

答えて

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; 
     } 
    } 
+0

ありがとうございます。 FileUtils.javaのリンクを教えてください。 –

+0

しかし、このコードでは、サブフォルダの下にファイル名は表示されません。 – Santhosh

+0

ヘリーに、http://stackoverflow.com/questions/38684209/how-to-pass-value-to-the-recurse-parをご覧ください – HelloCW

関連する問題