Java 列出文件夹内容,包括所有子目录和文件

Java 列出文件夹内容,包括所有子目录和文件,java,list,file,Java,List,File,给定文件夹结构: FolderA |_FolderB |_FolderC |_File5 |_FolderD |_File3 |_File4 |_File1 |_File2 我正试图编写一个小应用程序,打印出所有文件夹名,然后是所有文件名。输出应如下所示: FolderA FolderB FolderC FolderD File1 File2 File3 File4 File5 public class FileList { public

给定文件夹结构:

FolderA
|_FolderB 
  |_FolderC
    |_File5
  |_FolderD
    |_File3
    |_File4
  |_File1 
  |_File2
我正试图编写一个小应用程序,打印出所有文件夹名,然后是所有文件名。输出应如下所示:

FolderA
FolderB
FolderC
FolderD
File1
File2
File3
File4
File5
public class FileList {

    public static void main(String[] args) {

        File rootFile = new File("FolderA");
        File[] files = rootFile.listFiles();
        
        System.out.println("Root file path: " + rootFile.getAbsolutePath() + "\n");
        
        List<File> folderList = new LinkedList<File>();
        List<File> fileList = new LinkedList<File>();
        listFilesAndFolders(files, rootFile, folderList, fileList);
        
        extractFromList(folderList);
        extractFromList(fileList);
        
    }
    
    private static void listFilesAndFolders(File[] fList, File directoryName, List<File> folderList, List<File> fileList) {
        
        // Get all files from a directory.
        if(fList != null) {
            for (File file : fList) {      
                if (file.isFile()) {
                    fileList.add(file);
                } else if (file.isDirectory()) {
                    folderList.add(file);
                }
            }
        }
    }
    
    private static void extractFromList(List<File> list) {
        for (File item : list) {
            System.out.println(item.getName());
        }
    }
}
到目前为止,我的尝试如下所示:

FolderA
FolderB
FolderC
FolderD
File1
File2
File3
File4
File5
public class FileList {

    public static void main(String[] args) {

        File rootFile = new File("FolderA");
        File[] files = rootFile.listFiles();
        
        System.out.println("Root file path: " + rootFile.getAbsolutePath() + "\n");
        
        List<File> folderList = new LinkedList<File>();
        List<File> fileList = new LinkedList<File>();
        listFilesAndFolders(files, rootFile, folderList, fileList);
        
        extractFromList(folderList);
        extractFromList(fileList);
        
    }
    
    private static void listFilesAndFolders(File[] fList, File directoryName, List<File> folderList, List<File> fileList) {
        
        // Get all files from a directory.
        if(fList != null) {
            for (File file : fList) {      
                if (file.isFile()) {
                    fileList.add(file);
                } else if (file.isDirectory()) {
                    folderList.add(file);
                }
            }
        }
    }
    
    private static void extractFromList(List<File> list) {
        for (File item : list) {
            System.out.println(item.getName());
        }
    }
}

如何更改此设置以获取所有子文件和文件夹?

这称为遍历目录。Java中有现成的API可用。对于NIO API,实现如下所示:

FolderA
FolderB
FolderC
FolderD
File1
File2
File3
File4
File5
public class FileList {

    public static void main(String[] args) {

        File rootFile = new File("FolderA");
        File[] files = rootFile.listFiles();
        
        System.out.println("Root file path: " + rootFile.getAbsolutePath() + "\n");
        
        List<File> folderList = new LinkedList<File>();
        List<File> fileList = new LinkedList<File>();
        listFilesAndFolders(files, rootFile, folderList, fileList);
        
        extractFromList(folderList);
        extractFromList(fileList);
        
    }
    
    private static void listFilesAndFolders(File[] fList, File directoryName, List<File> folderList, List<File> fileList) {
        
        // Get all files from a directory.
        if(fList != null) {
            for (File file : fList) {      
                if (file.isFile()) {
                    fileList.add(file);
                } else if (file.isDirectory()) {
                    folderList.add(file);
                }
            }
        }
    }
    
    private static void extractFromList(List<File> list) {
        for (File item : list) {
            System.out.println(item.getName());
        }
    }
}
Files.walk(path.get(“E:\\temp”))
.filter(p->Files.isDirectory(p))
.forEach(System.out::println);
Files.walk(path.get(“E:\\temp”))
.filter(p->Files.isRegularFile(p))
.forEach(System.out::println);
Files.walk(..)
返回目录的内容流。在流上使用可以过滤内容


还有一个.

称为遍历目录。Java中有现成的API可用。对于NIO API,实现如下所示:

FolderA
FolderB
FolderC
FolderD
File1
File2
File3
File4
File5
public class FileList {

    public static void main(String[] args) {

        File rootFile = new File("FolderA");
        File[] files = rootFile.listFiles();
        
        System.out.println("Root file path: " + rootFile.getAbsolutePath() + "\n");
        
        List<File> folderList = new LinkedList<File>();
        List<File> fileList = new LinkedList<File>();
        listFilesAndFolders(files, rootFile, folderList, fileList);
        
        extractFromList(folderList);
        extractFromList(fileList);
        
    }
    
    private static void listFilesAndFolders(File[] fList, File directoryName, List<File> folderList, List<File> fileList) {
        
        // Get all files from a directory.
        if(fList != null) {
            for (File file : fList) {      
                if (file.isFile()) {
                    fileList.add(file);
                } else if (file.isDirectory()) {
                    folderList.add(file);
                }
            }
        }
    }
    
    private static void extractFromList(List<File> list) {
        for (File item : list) {
            System.out.println(item.getName());
        }
    }
}
Files.walk(path.get(“E:\\temp”))
.filter(p->Files.isDirectory(p))
.forEach(System.out::println);
Files.walk(path.get(“E:\\temp”))
.filter(p->Files.isRegularFile(p))
.forEach(System.out::println);
Files.walk(..)
返回目录的内容流。在流上使用可以过滤内容


还有一个。

您已经看到了一些关于如何使用的好例子

另一种选择,也可以考虑,是Apache的臭名昭著的。据我观察,它速度更快,甚至更具可定制性

要递归列出文件,请执行以下操作:

FileUtils.listFiles(新文件(\\path)),null,true)
.forEach(System.out::println);
/*
1.“null”可以通过扩展数组更改,比如字符串[]{“jar”,“txt”},以便过滤您想要列出的文件类型;
2.“true”指定要进行递归搜索。也可以使用“false”。
*/
要递归列出目录,请执行以下操作:

FileUtils.listFilesAndDirs(新文件(“\\path”),
新的NotFileFilter(TrueFileFilter.TRUE),
DirectoryFileFilter.DIRECTORY)
.forEach(System.out::println);
您将需要:


公地io
公地io

您已经看到了一些关于如何使用的好例子

另一种选择,也可以考虑,是Apache的臭名昭著的。据我观察,它速度更快,甚至更具可定制性

要递归列出文件,请执行以下操作:

FileUtils.listFiles(新文件(\\path)),null,true)
.forEach(System.out::println);
/*
1.“null”可以通过扩展数组更改,比如字符串[]{“jar”,“txt”},以便过滤您想要列出的文件类型;
2.“true”指定要进行递归搜索。也可以使用“false”。
*/
要递归列出目录,请执行以下操作:

FileUtils.listFilesAndDirs(新文件(“\\path”),
新的NotFileFilter(TrueFileFilter.TRUE),
DirectoryFileFilter.DIRECTORY)
.forEach(System.out::println);
您将需要:


公地io
公地io