Files.newDirectoryStream(path)不会递归返回文件

时间:2016-05-27 03:36:15

标签: java nio

我希望看到位于路径d:/ test文件夹下的所有文件的列表。但是,我只能直接在该文件夹下获取文件,但不能递归。 代码:

        String folder = "D:/test";
        Path path = fs.getPath(folder);
        try (DirectoryStream<Path> directoryStream = Files.newDirectoryStream(path)) {  
            for (Path p : directoryStream) {
                System.out.println(p.getFileName());
            }
        } catch (IOException e) {  
            e.printStackTrace();  
        }

结果:

a.txt
folder

文件夹结构: enter image description here

3 个答案:

答案 0 :(得分:3)

public function insertClick(){ $this->db->insert('click','id'); return $this->db->insert_id(); } public function insertClickDetail($data=array()){ return $this->db->insert('click_detail',$data); } 意味着表现得那样。如果您希望递归检索给定目录及其子目录中的所有目录和文件,则需要Files::newDirectoryStreamFiles::walk。例如(我假设您使用Java 8):

Files::walkFileTree

答案 1 :(得分:3)

另一种扩展自己逻辑的方法:

public static void printFileNamesRecursively(String path){
    Path yourPath = FileSystems.getDefault().getPath(path);

    try (DirectoryStream<Path> directoryStream = Files.newDirectoryStream(yourPath))           {  
            for (Path p : directoryStream) {
                System.out.println(p.getFileName());
                if(p.toFile().isDirectory()){

                    printFileNamesRecursively(p.toString());
                }

            }
        } catch (IOException e) {  
            e.printStackTrace();  
        }
}

答案 2 :(得分:1)

这是DirectoryStream的正确行为。相反,您可以使用 org.apache.commons.io.FileUtils 递归枚举文件。