Java File listFiles() Method

Java File Java File


listFiles()In Java, the method isjava.io.Filean important method provided by the class, used to get all files and subdirectories in the current directory. This method returns anFilearray of objects, eachFileobject represents a file or subdirectory in the directory.

Method Syntax

listFiles()The method has the following overloaded forms:

public File[] listFiles()
public File[] listFiles(FilenameFilter filter)
public File[] listFiles(FileFilter filter)

Basic Usage

Get all files and subdirectories in the directory

Without any parameters, the most basic usage is to directly calllistFiles()the method:

Example

import java.io.File;

public class ListFilesExample {
    public static void main(String[] args) {
        // Create a File object to represent the directory
        File directory = new File("C:/example");
       
        // Get all files and subdirectories in the directory
        File[] files = directory.listFiles();
       
        // Iterate and print the file names
        if (files != null) {
            for (File file : files) {
                System.out.println(file.getName());
            }
        }
    }
}

Method Parameters

FilenameFilter Interface

FilenameFilteris a functional interface used to filter file names:

Example

File[] listFiles(FilenameFilter filter)

Example: only list.txtfiles

Example

File directory = new File("C:/example");
File[] textFiles = directory.listFiles((dir, name) -> name.endsWith(".txt"));

FileFilter Interface

FileFilteris also a functional interface, but it is based onFileobjects for filtering:

Example

File[] listFiles(FileFilter filter)

Example: only list directories

Example

File directory = new File("C:/example");
File[] subDirectories = directory.listFiles(File::isDirectory);

Notes

  1. Null pointer check: IfFilethe object is not a directory or does not have read permission,listFiles()will returnnull, so you need to check the return value.

  2. Performance considerations: For directories containing a large number of files,listFiles()may consume a lot of memory because it loads all file information at once.

  3. Sorting issues: The returned file array does not guarantee any particular order. If sorting is needed, you can manually sort the array.

  4. Symbolic links: On Unix/Linux systems,listFiles()it will follow symbolic links.


Practical Application Examples

Recursively list all files

Example

import java.io.File;

public class RecursiveFileListing {
    public static void listFilesRecursively(File directory) {
        File[] files = directory.listFiles();
        if (files != null) {
            for (File file : files) {
                if (file.isDirectory()) {
                    listFilesRecursively(file);
                } else {
                    System.out.println(file.getAbsolutePath());
                }
            }
        }
    }
   
    public static void main(String[] args) {
        listFilesRecursively(new File("C:/example"));
    }
}

Using Java 8 Stream API

Example

import java.io.File;
import java.util.Arrays;
import java.util.stream.Stream;

public class FileStreamExample {
    public static void main(String[] args) {
        File directory = new File("C:/example");
       
        // Use Stream to process files
        Stream.of(directory.listFiles())
              .filter(File::isFile)
              .map(File::getName)
              .forEach(System.out::println);
    }
}

Alternatives

In Java 7 and above, you can consider usingjava.nio.filein the packageFilesandPathclasses, which provide a more modern way of file operations:

Example

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;

public class NioFileListing {
    public static void main(String[] args) throws Exception {
        Path dir = Paths.get("C:/example");
       
        try (Stream<Path> stream = Files.list(dir)) {
            stream.filter(Files::isRegularFile)
                  .map(Path::getFileName)
                  .forEach(System.out::println);
        }
    }
}

Summary

listFiles()The method is a basic tool in Java file operations. Mastering its use is very important for file handling. In actual development, choose the appropriate filtering method based on specific needs, and pay attention to handling possible exceptions. For new projects, consider using Java NIO'sFilesclass, which provides more powerful and flexible file operation functions.

Java File Java File

Other Extensions