2012-10-01 38 views
0

可能重複的路徑:
Android File Picker訪問的文件瀏覽器,獲取文件

我需要包括返回我所選擇的文件的完整文件路徑的文件選擇器,在我的Android應用程序。

但我不知道如何實現這一點。

我還沒有在Stackoverflow中尋找這個問題,但我還沒有找到明確的答案給我的問題。

我已經找到了如何從Gallery中的圖像獲取filePath,但沒有任何關於獲取其他所有文件類型的filePath的方法。

回答

0
private List<String> FindFiles(Boolean fullPath) { 
     final List<String> tFileList = new ArrayList<String>(); 

     String[] fileTypes = new String[]{"dat","doc","apk"....}; // file extensions you're looking for 
     FilenameFilter[] filter = new FilenameFilter[fileTypes .length]; 

     int i = 0; 
     for (final String type : fileTypes) { 
      filter[i] = new FilenameFilter() { 
       public boolean accept(File dir, String name) { 
        return name.endsWith("." + type); 
       } 
      }; 
      i++; 
     } 

     FileUtils fileUtils = new FileUtils(); 
     File[] allMatchingFiles = fileUtils.listFilesAsArray(
       new File("/sdcard"), filter, -1); 
     for (File f : allMatchingFiles) { 
      if (fullPath) { 
       tFileList.add(f.getAbsolutePath()); 
      } 
      else { 
       tFileList.add(f.getName()); 
      } 
     } 
     return tFileList; 
    } 

    public class FileUtils { 


     public File[] listFilesAsArray(File directory, FilenameFilter[] filter, 
       int recurse) { 
      Collection<File> files = listFiles(directory, filter, recurse); 

      File[] arr = new File[files.size()]; 
      return files.toArray(arr); 
     } 

     public Collection<File> listFiles(File directory, 
       FilenameFilter[] filter, int recurse) { 

      Vector<File> files = new Vector<File>(); 

      File[] entries = directory.listFiles(); 

      if (entries != null) { 
       for (File entry : entries) { 
        for (FilenameFilter filefilter : filter) { 
         if (filter == null 
           || filefilter 
             .accept(directory, entry.getName())) { 
          files.add(entry); 
          Log.v("FileUtils", "Added: " 
            + entry.getName()); 
         } 
        } 
        if ((recurse <= -1) || (recurse > 0 && entry.isDirectory())) { 
         recurse--; 
         files.addAll(listFiles(entry, filter, recurse)); 
         recurse++; 
        } 
       } 
      } 
      return files; 
     } 
    } 
+0

我該如何使用這段代碼?你能給我更多的細節嗎? – AndreaF

+0

當然,請在您的活動中包含此代碼。然後使用列表 files = FindFiles(true)來獲取文件列表。使用「true」獲取完整路徑,使用「false」獲取文件名。 SDCARD上包含fileTypes中擴展名的所有文件都將被返回 –

相關問題