2011-07-01 7 views
0

SDCARD内のすべての画像をそのディレクトリが存在するディレクトリで読み込もうとしています。/mnt/sdcard/album1にファイルTEST.jpgがあり、/ mnt/sdcard/album1/album2にTEST2.jpgというファイルがある場合、ディレクトリ名album1とalbum2を取得できるはずです。 私は再帰的にこれを行うコードを書いています。これは、フォルダの数が少なくてもディレクトリの数が増えるとループが出てくるときに機能します。android画像があるSDCARD内のすべてのディレクトリを読む

 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(); 

        } 
       }  
      } 
     } 
    } 
} 

答えて

2

次のコードを使用してください。 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; 
    } 
+0

sahoo:それは私にJPEGファイルの正確なファイルパスを与えます。私が必要とするのはディレクトリまでのパスだけです。私が1つのフォルダ/mnt/sdcard/album1/album2/test.jpgと/mnt/sdcard/album3/test1.jpgを持っていれば、私の結果は最初の値が/ man/sdcard/album1/album2である文字列のarraylistでなければならず、 2番目のエントリは/ mnt/sdcard/album3になります。なぜDCIMフォルダを検索していないのですか? – jhon

0

すべての画像ファイルをSdcardから取得するには、動作する可能性があります。

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()); 
       } 
      } 
     } 
    } 
} 
関連する問題