2012-12-10 19 views
6

मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जिसमें एसडी कार्ड से पीडीएफ, डॉक्टर एक्सएलएस फाइल स्कैन करने और उनकी सूची बनाने के लिए एक मॉड्यूल शामिल है। मैं केवल फ़ोल्डरों की सूची बनाना चाहता हूं।एंड्रॉइड में फ़ाइलों के विशेष विस्तार के लिए एसडी कार्ड स्कैन कैसे करें?

जैसा कि मैं एंड्रॉइड के लिए बहुत नया हूं। किसी को भी इसे प्राप्त करने का विचार है।

public class MediaScannerWrapper implements 
MediaScannerConnection.MediaScannerConnectionClient { 
    private MediaScannerConnection mConnection; 
    private String mPath; 
    private String mMimeType; 

    // filePath - where to scan; 
    // mime type of media to scan i.e. "image/jpeg". 
    // use "*/*" for any media 
    public MediaScannerWrapper(Context ctx, String filePath, String mime){ 
     mPath = filePath; 
     mMimeType = mime; 
     mConnection = new MediaScannerConnection(ctx, this); 
    } 

    // do the scanning 
    public void scan() { 
     mConnection.connect(); 
    } 

    // start the scan when scanner is ready 
    public void onMediaScannerConnected() { 
     mConnection.scanFile(mPath, mMimeType); 
     Log.w("MediaScannerWrapper", "media file scanned: " + mPath); 
    } 

    public void onScanCompleted(String path, Uri uri) { 
     // when scan is completes, update media file tags 
    } 
} 
+0

क्या आप [गहराई-पहले खोज] की कोशिश (http://en.wikipedia.org/wiki/Depth-first_search) या [चौड़ाई-पहले खोज] (http://en.wikipedia.org/ wiki/चौड़ाई-first_search)? – rekire

उत्तर

21
public void walkdir(File dir) { 
    String pdfPattern = ".pdf"; 

    File[] listFile = dir.listFiles(); 

    if (listFile != null) { 
     for (int i = 0; i < listFile.length; i++) { 

      if (listFile[i].isDirectory()) { 
       walkdir(listFile[i]); 
      } else { 
       if (listFile[i].getName().endsWith(pdfPattern)){ 
           //Do what ever u want 

       } 
      } 
     } 
    } } 

इस समारोह walkdir(Environment.getExternalStorageDirectory());

+0

आपका कोड चट्टानों। क्या हम केवल इस फ़ोल्डर और एसडी कार्ड में मौजूद सभी फाइलों को सूचीबद्ध कर सकते हैं। कृपया मदद करे। –

+2

पथ में प्रतीकात्मक लिंक होने पर यह कोड उड़ा देगा। –

2

उपयोग getExternalStorageDirectory() का उपयोग कर एसडी कार्ड पथ पाने के लिए पूरे sdcard फोन पर खोजने के लिए:

यहाँ मेरी कोड है। (इसे हार्डकोड न करें)

प्रत्येक उपफोल्डर के माध्यम से लूप, और अपने वांछित एक्सटेंशन के साथ फाइल नामों की जांच करें। फ़ाइल नाम एक्सटेंशन के साथ समाप्त होने पर जांचने के लिए स्ट्रिंग endswith() विधि का उपयोग करें।

Here's a sample code जो आपकी मदद कर सकता है।

2

मैं commons.io लाइब्रेरी का उपयोग करने की सलाह देता हूं जो प्रतीकात्मक लिंक और एक्सटेंशन रिज़ॉल्यूशन को भी संभालता है।

टास्क एक्सटेंशन के साथ फ़ाइलों के लिए स्कैन करने:

import android.os.AsyncTask; 
import android.os.Environment; 
import android.util.Log; 
import org.apache.commons.io.FileUtils; 

import java.io.File; 
import java.util.ArrayList; 
import java.util.List; 

public class ScanTask extends AsyncTask<String,Void,ScanTask.Result> { 

    @Override 
    protected Result doInBackground(String... extensions) { 

     if(extensions == null){ 
      extensions = new String[0]; 
     } 

     List<File> files = new ArrayList<File>(); 
     boolean success = false; 
     String status = ""; 

     if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ 
      try { 
       files.addAll(FileUtils.listFiles(Environment.getExternalStorageDirectory(), extensions, true)); 
       success = true; 
       status = "ok"; 
      } catch (Exception e) { 
       Log.e("MyApp","File error:",e); 
       success = false; 
       status = "Scan error"; 
      } 
     }else { 
      success = false; 
      status = "External storage not available"; 
     } 


     return new Result(success,status,files); 
    } 

    public static class Result{ 
     public final boolean success; 
     public final String message; 
     public final List<File> files; 

     public Result(boolean success, String message,List<File> files) { 
      this.success = success; 
      this.message = message; 
      this.files = files; 
     } 
    } 
} 

उपयोग:

ScanTask task = new ScanTask(){ 
     @Override 
     protected void onPostExecute(Result result) { 
      super.onPostExecute(result); 

      if(result.success){ 
       List<File> files = result.files; 
       //--do something with files-- 
      }else { 
       String error = result.message; 
       //--do something with error message-- 
      } 
     } 
    }; 

    task.execute("mp3","jpeg"); 
0

आप इस कोड का उपयोग कर सकते हैं:
यहाँ link है।

/** 
    * Class to filter files which are having .mp3 extension 
    * */ 
//you can choose the filter for me i put .mp3 
class FileExtensionFilter implements FilenameFilter { 
    public boolean accept(File dir, String name) { 
     return (name.endsWith(".pdf") || name.endsWith(".docs")) || name.endsWith(".3gp") ; 
    } 
} 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^