2017-02-22 20 views
0

Я хочу нажать кнопку в моей деятельности и открыть отдельное действие, которое отображает администратор папки, к которой я хочу получить доступ. Таким образом, код для перехода к следующему действию прост (начинайте новую деятельность с намерения). Однако я хочу отобразить содержимое папки в этом новом действии в arraylist.ArrayList для файлов в папке Android Внутреннее хранилище/хранилище/эмулировано/0/

Пустой путь к этому содержимому во внутреннем хранилище моего устройства (а не внешнее хранилище SDCard).

Я хотел бы, чтобы отобразить файлы из следующего каталога

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

ком ... это подделка имя пути, это просто иллюстрирует, что есть имя пакета.

Итак, в нижней строке я хочу отображать содержимое в файлах (текстовые файлы или изображения и т. Д.) В arraylist в моем новом действии. Всякий раз, когда я пытаюсь указать на этот путь с помощью «Файл», он не отображает 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()' может вернуть нуль –

+0

Galvin, Я отладил программу, и да, она возвращает null. Я использую ненастроенное устройство. Это связано с тем, что не все пользователи будут иметь внедренное устройство. Если устройство не внедрено, нет ли способа доступа к внутреннему хранилищу? Или, есть ли способ установить минимальный или некоторый код для создания диспетчера файлов на месте, который приводит пользователя в эту папку? –

+0

У вас будет только доступ к sdcard и директории, перечисленной здесь 'getApplicationContext(). GetApplicationInfo(). DataDir' –

ответ

0

Мое решение ниже. У меня также возникает проблема с реализацией FileInputStream с использованием файлов, которые я могу видеть из приведенного ниже кода. Принимая подстроку, я могу захватить имена файлов, но когда я использую FileInputStream, у меня возникают трудности с чтением. Мое исключение выбрано в этой строке кода.

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

Мое решение актуального вопроса.

Внутри 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. Это помещается в 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 метод End.

+0

Можете ли вы также добавить трассировку Exception/Stack? –

 Смежные вопросы

  • Нет связанных вопросов^_^