2017-02-22 133 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

您还可以添加异常/堆栈跟踪吗? –

相关问题