2017-02-22 90 views
0

我想單擊我的活動中的按鈕並打開一個單獨的活動,顯示我想要訪問的文件夾的數組列表。因此,進入下一個活動的代碼很簡單(以意圖開始新活動)。但是,我想在arraylist中的這個新活動中顯示文件夾的內容。文件夾中的文件的ArrayList Android內部存儲/存儲/模擬/ 0/

此內容的路徑位於設備的內部存儲器中(不是外部/ SD卡存儲器)。

我想從以下目錄

顯示文件/storage/emulated/0/Android/data/com.../files/

COM ...是假的路徑名,這只是爲了說明包名。

所以底線是我想在我的新活動中的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是否被填充?使用不Rooted的設備,您只能訪問非常特定的目錄;因此你的'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,以便列表視圖一旦打開頁面立即填充。

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

您還可以添加異常/堆棧跟蹤嗎? –

相關問題