get number of files in a directory and its subdirectories

后端 未结 12 867
猫巷女王i
猫巷女王i 2020-12-28 09:19

using this code

new File(\"/mnt/sdcard/folder\").listFiles().length

returns a sum of folders and files in a particular directory without ca

相关标签:
12条回答
  • 2020-12-28 10:02

    you will have to do a recursive search over your files. Use `File#isDrirectory()´ to check if a file is a directory and traverse the file tree down.

    0 讨论(0)
  • 2020-12-28 10:05

    Try this.

    int count = 0;
    getFile("/mnt/sdcard/folder/");
    
    private void getFile(String dirPath) {
        File f = new File(dirPath);
        File[] files = f.listFiles();
    
        if (files != null)
        for (int i = 0; i < files.length; i++) {
            count++;
            File file = files[i];
    
            if (file.isDirectory()) {   
                 getFile(file.getAbsolutePath()); 
            }
        }
    }
    

    It may help you.

    0 讨论(0)
  • 2020-12-28 10:11
    public Integer countFiles(File folder, Integer count) {
        File[] files = folder.listFiles();
        for (File file: files) {
            if (file.isFile()) {
                count++;
            } else {
                countFiles(file, count);
            }
        }
    
        return count;
    }
    

    Usage:

    Integer count = countFiles(new File("your/path"), Integer.valuOf(0));
    
    0 讨论(0)
  • 2020-12-28 10:13

    Using Java 8 NIO:

    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    
    public class Test {
    
      public long fileCount(Path dir) { 
        return Files.walk(dir)
                    .parallel()
                    .filter(p -> !p.toFile().isDirectory())
                    .count();
      }
    
      public void main(String... args) {
        Path dir = Paths.get(args[0]);
        long count = fileCount(dir);
    
        System.out.println(args[0] + " has " + count + " files");
      }
    
    }
    
    0 讨论(0)
  • 2020-12-28 10:18

    You can use recursion.

    public static int getFilesCount(File file) {
      File[] files = file.listFiles();
      int count = 0;
      for (File f : files)
        if (f.isDirectory())
          count += getFilesCount(f);
        else
          count++;
    
      return count;
    }
    
    0 讨论(0)
  • 2020-12-28 10:19

    Just for the record, you may also use iteration instead of recursion:

    public static int countFiles(final File dir) {
        final ArrayDeque<File> dirs = new ArrayDeque<>();
        dirs.add(dir);
        int cnt = 0;
        while (!dirs.isEmpty()) {
            final File[] files = dirs.poll().listFiles();
            for (final File f: files)
                if (f.isDirectory())
                    dirs.add(f);
                else
                    ++cnt;
        }
        return cnt;
    }
    

    In this implementation I'm using ArrayDeque but you can use any Queue or any List for the job.

    0 讨论(0)
提交回复
热议问题