2017-02-22 10 views
0

私のアクティビティのボタンをクリックして、アクセスしたいフォルダのarraylistを表示する別のアクティビティを開きます。したがって、次のアクティビティに進むコードは簡単です(新しいアクティビティをインテントで開始する)。しかし、私はarraylistにこの新しいアクティビティのフォルダの内容を表示したいと思います。フォルダ内のファイルのArrayList Androidストレージ/ストレージ/エミュレート/ 0/

このコンテンツのパスは、自分のデバイスの内部ストレージにあります(外部/ SDカードストレージではありません)。私は以下のディレクトリ

/storage/emulated/0/Android/data/com.../files/

COMからファイルを表示したい

...は、偽のパス名ですパッケージ名があることを説明するだけです。

結論私は新しい活動のarraylistのファイル(テキストファイルや写真など)の内容を表示したいですか? 'File'でこのパスを指し示すと、arraylistは表示されず、空白の画面が表示されます。

したがって、たとえば:

String path = "/storage/emulated/0/Android/data/com.../files/"; 
File dir = new File(path); 

List values = new ArrayList(); 

String[] list = dir.list(); 
if (list != null) { 
    for (String file : list) { 
     if (!file.startsWith(".")) { 
      values.add(file); 
     } 
    } 
} 

Collections.sort(values); 

ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_2, android.R.id.text1, values); 
setListAdapter(adapter); 
+0

あなたのArraylistの人口は増えていますか?ルートされていないデバイスでは、特定のディレクトリにしかアクセスできません。あなたの 'dir.list()'はnullを返すかもしれません –

+0

Galvin、 私はプログラムをデバッグしました。はい、nullを返しています。私は根づいていないデバイスを使用しています。これは、すべてのユーザーがルートされたデバイスを持つわけではないためです。デバイスがルートされていない場合、内部ストレージにアクセスする方法はありませんか? または、このフォルダにユーザーを連れて来るスポットファイルマネージャーを作成するための最小限のコードやコードを入れる方法はありますか? –

+0

あなたはsdcardとここに 'getApplicationContext()。getApplicationInfo()。dataDir'に記載されているディレクトリにアクセスするだけです。 –

答えて

0

私のソリューションは以下の通りです。また、以下のコードから見ることができるファイルを使用してFileInputStreamを実装するのに問題があります。部分文字列を取ることで、ファイル名を取得できますが、FileInputStreamを使用すると読みにくくなります。私の例外はこのコード行にスローされます。

FileInputStream in = openFileInput( "test.txt");

実際の質問に対する私の解決策。 onCreateの内部のOnCreateの

lvFiles = (ListView)findViewById(R.id.listViewFiles); 

     String path = "/storage/emulated/0/Android/data/com.../files/"; 

     try { 

      List<File> files = getListFiles(new File(path)); 


      String[] namesOfFiles = new String[files.size()]; 
      for (int i = 0; i < files.size(); i++) { 
       namesOfFiles[i] = files.get(i).toString(); 
      } 

      ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.filetextview, namesOfFiles); 

      lvFiles.setAdapter(arrayAdapter); 
      //lvFiles.setAdapter(new CustomAdapterArrayAdapter(FilesList.this, files)); 

     } 

     catch (Exception e) 
     { 

     } 

エンドインサイド

。これはonCreateに入れられ、ページが開かれるとすぐにlistviewに値が設定されます。

getListFiles方法は

private List<File> getListFiles(File parentDir) 
    { 
     ArrayList<File> inFiles = new ArrayList<File>(); 
     File[] files = parentDir.listFiles(); 
     for (File file : files) { 

      //if (file.getName().endsWith(".txt")) 

      if (file.isDirectory()) { 
       inFiles.addAll(getListFiles(file)); 
      } else { 
       if(file.getName().endsWith(".txt")){ 
        inFiles.add(file); 
       } 
      } 
     } 
     return inFiles; 
    } 

getListFiles方法の終了を開始します。

+0

例外/スタックトレースを追加することはできますか? –

関連する問題