0

こんにちは、外部ストロージからファイル名を取得しようとしましたが、エラーが発生しました。どこに問題がありますか?

public class MainActivity extends Activity {

//protected ContextWrapper context;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button test=(Button) findViewById(R.id.button1);
    test.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            //ContextWrapper context = new ContextWrapper();
            // TODO Auto-generated method stub
        //  File datapath = Environment.getDataDirectory();
            //File cacheDir = new File(context.getCacheDir(),"tempfile");
            String extState = new String();
            extState=Environment.getExternalStorageState();
            //File amcuk=Environment.getExternalStorageDirectory();
            //String externalname=new String();
            //String internalname=new String();
            //you may also want to add (...|| Environment.MEDIA_MOUNTED_READ_ONLY)
            //if you are only interested in reading the filesystem
            //try {
            String name=new String();
                if(!extState.equals(Environment.MEDIA_MOUNTED)) {
                    //handle error here
                    Log.d("ss", "sad");}
                else {
                    //File f=new File(extState);
                    Log.d("www", "www");
                    Log.d("wwwaaaaaaaaaaaaaaa", "wwwaaaaaaaaaaaaa");
                    File sdCardRoot = Environment.getExternalStorageDirectory();
                    File yourDir = new File(sdCardRoot, "yourpath");
                    for (File f : yourDir.listFiles()) {
                        if (f.isFile()){
                             name = f.getName();
                            }
                            // make something with the name
                    }
            }// catch (Exception e) {
                // TODO: handle exception
                //Log.d("sasd", "sad");*/
            //}

            Log.d("dosya adları", extState);
            //File mydataDir =new File(path,"path");



            //Log.d("dosya adları internal", internalname);
        }
    });

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

manifest.xml 権限を追加する

   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

ddms ログ メッセージは

08-24 16:54:38.986: E/AndroidRuntime(2629): FATAL EXCEPTION: main
08-24 16:54:38.986: E/AndroidRuntime(2629): java.lang.NullPointerException
08-24 16:54:38.986: E/AndroidRuntime(2629):     at com.example.fileexplorear.MainActivity$1.onClick(MainActivity.java:55)
08-24 16:54:38.986: E/AndroidRuntime(2629):     at android.view.View.performClick(View.java:2461)
08-24 16:54:38.986: E/AndroidRuntime(2629):     at android.view.View$PerformClick.run(View.java:8890)
08-24 16:54:38.986: E/AndroidRuntime(2629):     at android.os.Handler.handleCallback(Handler.java:587)
08-24 16:54:38.986: E/AndroidRuntime(2629):     at android.os.Handler.dispatchMessage(Handler.java:92)
08-24 16:54:38.986: E/AndroidRuntime(2629):     at android.os.Looper.loop(Looper.java:123)
08-24 16:54:38.986: E/AndroidRuntime(2629):     at android.app.ActivityThread.main(ActivityThread.java:4632)
08-24 16:54:38.986: E/AndroidRuntime(2629):     at java.lang.reflect.Method.invokeNative(Native Method)
08-24 16:54:38.986: E/AndroidRuntime(2629):     at java.lang.reflect.Method.invoke(Method.java:521)
08-24 16:54:38.986: E/AndroidRuntime(2629):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
08-24 16:54:38.986: E/AndroidRuntime(2629):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
08-24 16:54:38.986: E/AndroidRuntime(2629):     at dalvik.system.NativeStart.main(Native Method)

私の55ラインは

                        for (File f : yourDir.listFiles()) {
4

1 に答える 1

0

私が見ることができる唯一の可能な説明は、listFiles()null を返すことです。

ドキュメントから:

このファイルが表すディレクトリに含まれるファイルの配列を返します。このファイルがディレクトリでない場合、結果はnullになります。このファイルのパスが絶対パスである場合、配列内のファイルのパスは絶対パスであり、それ以外の場合は相対パスです。

戻り値

ファイルの配列または null。

したがって、ファイルはディレクトリではありません。

代わりに、ディレクトリへの文字列パラメーターのみを使用してファイルを作成してみてください

(そしてあなたのパラメータをスキップして"yourpath"ください):

String sdCardRoot = Environment.getExternalStorageDirectory().toString();
    File yourDir = new File( root_sd ) ;       
    File list[] = yourDir.listFiles();

指定されたパスを使用して新しいファイルを作成します。

于 2013-08-24T14:29:29.333 に答える