2016-11-02 4 views
1

Ich habe einen Ordner in assets Ordner mit dem Namen s1. Es gibt etwa hundert Textdatei darin. Ich möchte zählen, wie viele Textdateien sich in diesem Ordner befinden.Zählen von Dateien in Assets Unterordner

Die Anwendung abstürzt mit diesem Fehler starten bei: `

Caused by: java.lang.NullPointerException: Attempt to get length of null array 

Hier ist der Code in MainActivity:

Integer fileCount = 0; 
    fileCount = Integer.valueOf(new File("./assets/s1/").listFiles().length); 


    for(int i=0;i<fileCount;i++) { 

     Button btn = new Button(this); 
     btn.setId(i+1); 
     btn.setText("button "+(i+1)); 
     btn.setLayoutParams(lprams); 
     final int index = i; 
     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Log.i("TAG", "The index is" + index); 
      } 
     }); 
     dynamicview.addView(btn); 
    } 

Wie das lösen?

+0

Haben Sie versucht zu debuggen? Zum Beispiel, separate Methodenaufrufe der 2. Zeile, und schauen was ist der Wert von 'new File (" .. ")', dann der Wert von '.listFiles()' und so weiter? –

+0

Sie können die Dateiklasse nicht für Dateien in Assets verwenden. Und der benutzte Pfad ist auch falsch. Sie googlen besser, wie Sie eine Datei aus Assets lesen können. Oder wie man sie auflistet. – greenapps

Antwort

0

Sie müssen die Vermögenswerte wie folgt zugreifen:

fileCount = getResources().getAssets().list("s1").length; 

getResources() gibt die Resources Instanz für Ihre App. Wenn getAssets() aufgerufen wird, wird die AssetManager zurückgegeben. Dateien in den Assets sind im Dateisystem nicht vorhanden, sodass Sie sie nicht wie normale Dateien öffnen und lesen können.

0

Verwenden Sie getAssets().open(path); Und beginnen Sie von Ordnernamen innerhalb der Asset-Hierarchie oder Dateiname, wenn es keinen Unterordner gibt.

Verwandte Themen