【问题标题】:How to get all the filenames in android directory?如何获取android目录中的所有文件名?
【发布时间】:2013-11-25 01:40:03
【问题描述】:

我试图列出我的 android 模拟器特定文件夹中的所有文件,但我一直得到空答案。

这是我的代码:

File sdCardRoot = Environment.getExternalStorageDirectory();
File[] file= new File(sdCardRoot+"path");
for (File f : file.listFiles()) {
    if (f.isFile())
        String name = f.getName();

}

这似乎不起作用不知道为什么。

【问题讨论】:

    标签: java android


    【解决方案1】:

    我将函数分为两部分,第一个函数获取给定路径中的所有文件,第二个函数从文件数组中获取文件名。

    public File[] GetFiles(String DirectoryPath) {
        File f = new File(DirectoryPath);
        f.mkdirs();
        File[] file = f.listFiles();
        return file;
    }
    
    public ArrayList<String> getFileNames(File[] file){
        ArrayList<String> arrayFiles = new ArrayList<String>();
         if (file.length == 0)
                return null;
            else {
                for (int i=0; i<file.length; i++) 
                    arrayFiles.add(file[i].getName());
            }
    
        return arrayFiles;
    }
    

    【讨论】:

    • 如果可以使用简单的String 数组,为什么还要使用数组列表?
    • 确实没有什么不同。由于他使用文件,他可能希望对列表进行更多操作,并且使用 arraylist 更容易执行这些操作。而且我总是更喜欢arraylist而不是数组:)
    • 短:public ArrayList GetFiles(String path){ ArrayList f_arr = new ArrayList();文件 f_path = 新文件(路径);文件[] 文件 = f_path.listFiles(); for(文件 f : 文件) f_arr.add(f.getName());返回 f_arr; }
    【解决方案2】:

    改变

    File[] file= new File(sdCardRoot+"path");
    

    File[] file= new File(sdCardRoot, "path");
    

    并确保目录path 退出

    【讨论】:

    • 您必须使用File.seperator。试试这个File[] file= new File(sdCardRoot+File.seperator+"path")
    • 您错过了文件分隔符 / 所以结果字符串是 /mnt/sdcardpath 而不是 /mnt/sdcard/path。既然文件有一个带有两个参数的构造函数,为什么不使用它呢?
    • 不,我将路径以“/”开头,我只是在这里写了路径,以使其易于阅读。但我明白你的意思,将使用逗号。
    【解决方案3】:

    只需检查一下:

      List<File> files = getListFiles(new File("YOUR ROOT")); 
      private List<File> getListFiles(File parentDir) {
          ArrayList<File> inFiles = new ArrayList<File>();
          File[] files = parentDir.listFiles();
          for (File file : files) {
              if (file.isDirectory()) {
              inFiles.addAll(getListFiles(file));
          } else {
              if(file.getName().endsWith(".csv")) {
                  inFiles.add(file);
              }
          }
    }
    
    return inFiles;
    

    【讨论】:

    • inFiles 不应该是局部变量
    【解决方案4】:

    由于sdCardRootFile 的实例,sdCardRoot+"path" 将返回与sdCardRoot.toString() + "path" 相同的内容。

    但是,调用 file.toString() 返回文件名,而不是绝对路径。您需要致电sdCardRoot.getAbsolutePath() + "path"

    另外,请确保您已允许模拟器使用一定数量的内存用于外部存储。

    【讨论】:

      猜你喜欢
      • 2016-03-07
      • 2012-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-20
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      相关资源
      最近更新 更多