Home > Backend Development > PHP Tutorial > 递归遍历目录 深度问题

递归遍历目录 深度问题

WBOY
Release: 2016-06-06 20:50:26
Original
1251 people have browsed it

<code>目录结构 例如
a
a-1/a-11/a-111
b-1/b-11/b-111/b-1111

c
c-1/c-11/c-111
d-1/d-11/d-111/d-111

已知一个目录列表 如上的 a c 遍历子目录  按深度2来遍历

结果就是
a
a-1/a-11/
b-1/b-11/

c
c-1/c-11/
d-1/d-11/
求代码 PHP JAVA 都行
</code>
Copy after login
Copy after login

回复内容:

<code>目录结构 例如
a
a-1/a-11/a-111
b-1/b-11/b-111/b-1111

c
c-1/c-11/c-111
d-1/d-11/d-111/d-111

已知一个目录列表 如上的 a c 遍历子目录  按深度2来遍历

结果就是
a
a-1/a-11/
b-1/b-11/

c
c-1/c-11/
d-1/d-11/
求代码 PHP JAVA 都行
</code>
Copy after login
Copy after login

本来这种问题,只需要你稍微google一下就有现成的答案滴,直接贴答案并不是一种好的交流学习方式。

故此,还是贴一些Java7新的文件API写的代码吧,至于java7之前的文件API写的代码,google即可得之。

<code>Path start = FileSystems.getDefault().getPath("D:/cglib");

    Files.walkFileTree(start, EnumSet.allOf(FileVisitOption.class), 3,
            new FileVisitor<path>() {
                @Override
                public FileVisitResult preVisitDirectory(Path dir,
                        BasicFileAttributes attrs) throws IOException {
                    System.out.println(dir);
                    return FileVisitResult.CONTINUE;
                }

                @Override
                public FileVisitResult visitFile(Path file,
                        BasicFileAttributes attrs) throws IOException {
                    return FileVisitResult.CONTINUE;
                }

                @Override
                public FileVisitResult visitFileFailed(Path file,
                        IOException exc) throws IOException { 
                    return FileVisitResult.CONTINUE;
                }

                @Override
                public FileVisitResult postVisitDirectory(Path dir,
                        IOException exc) throws IOException {
                    return FileVisitResult.CONTINUE;
                }
    });
</path></code>
Copy after login

这个貌似不难吧,我用javascript写给你吧,都差不多的。

<code class="lang-javascript">var deps=3
var basenames=["a","b","c"]
for ( var i =0;i<basenames.length var suffix="" for j="0;j<deps;j++){" result="fs.readdir(basenames[i]+suffix)" console.log></basenames.length></code>
Copy after login

递归的时候加上层级参数即可,每次递归参数都需要+1来确认当前层级,然后在下次递归开始的时候判断当前层级是否已经到达限制层级,如果到达则不再往下层递归

<code><?php function read_folder($folder, $level = 1) {
    if (is_dir($folder)) {
        if ($dh = opendir($folder)) {
            while (($file = readdir($dh)) !== false) {
                if ($file != '.' && $file != '..') {
                    $path = $folder.DIRECTORY_SEPARATOR.$file;
                    if (is_dir($path)) {
                        var_dump($path, $level);
                        // 这里控制读取的层级
                        if ($level < 2) { 
                            read_folder($path, $level + 1); //每次递归都要增加层级计数
                        }
                    }
                }
            }
            closedir($dh);
        }
    }
}
</code></code>
Copy after login
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template