6

私は、sdカードからpdf、doc xlsファイルをスキャンしてそれらのリストを作成するモジュールを含むプロジェクトに取り組んでいます。フォルダのみのリストも作りたいです。

私はアンドロイドに非常に慣れていないので。誰もがこれを達成する考えを持っています。

これが私のコードです:

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
    }
}
4

4 に答える 4

23
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

              }
            }
        }
    }    }

SDカード全体を検索するには、次を使用してこの関数を呼び出しますwalkdir(Environment.getExternalStorageDirectory());

于 2012-12-10T12:22:23.663 に答える
2

getExternalStorageDirectory()を使用して、SD カードのパスを取得します。(ハードコーディングしないでください)

各サブフォルダーをループし、目的の拡張子を持つファイル名を確認します。ファイル名が拡張子で終わっているかどうかを確認するには、Stringの endwith()メソッドを使用します。

これがあなたを助けるかもしれないサンプルコードです。

于 2012-12-10T12:24:05.633 に答える
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");
于 2013-08-02T08:08:19.433 に答える