Domanda elenca tutti i file nella cartella e anche le sottocartelle [duplicate]


Possibile duplicato:
Elenca tutti i file da una directory in modo ricorsivo con Java 

Come posso restituire un array di file che include tutti i file nella cartella e anche sottocartelle il mio metodo funziona solo per la cartella e non include le sottocartelle.

public File[] listf(String directoryName) {

    // .............list file
    File directory = new File(directoryName);

    // get all the files from a directory
    File[] fList = directory.listFiles();

    for (File file : fList) {
        if (file.isFile()) {
            System.out.println(file.getAbsolutePath());
        } else if (file.isDirectory()) {
            listf(file.getAbsolutePath());
        }
    }
    System.out.println(fList);
    return fList;
}                        

44
2018-02-03 19:41


origine


risposte:


Usando il tuo codice attuale, fai questo tweak:

public void listf(String directoryName, List<File> files) {
    File directory = new File(directoryName);

    // Get all the files from a directory.
    File[] fList = directory.listFiles();
    for (File file : fList) {
        if (file.isFile()) {
            files.add(file);
        } else if (file.isDirectory()) {
            listf(file.getAbsolutePath(), files);
        }
    }
}

66
2018-02-03 19:37



Uso fileutils dai commons di Apache.

listFiles

public static Collection<File> listFiles(File directory,
                                         String[] extensions,
                                         boolean recursive)
Finds files within a given directory (and optionally its subdirectories) which match an array of extensions.
Parameters:
directory - the directory to search in
extensions - an array of extensions, ex. {"java","xml"}. If this parameter is null, all files are returned.
recursive - if true all subdirectories are searched as well
Returns:
an collection of java.io.File with the matching files

25
2018-02-03 19:45



Puoi restituire a List invece di un array e le cose diventano molto più semplici.

    public static List<File> listf(String directoryName) {
        File directory = new File(directoryName);

        List<File> resultList = new ArrayList<File>();

        // get all the files from a directory
        File[] fList = directory.listFiles();
        resultList.addAll(Arrays.asList(fList));
        for (File file : fList) {
            if (file.isFile()) {
                System.out.println(file.getAbsolutePath());
            } else if (file.isDirectory()) {
                resultList.addAll(listf(file.getAbsolutePath()));
            }
        }
        //System.out.println(fList);
        return resultList;
    } 

15