Heim >Backend-Entwicklung >PHP-Tutorial >递归遍历目录 深度问题

递归遍历目录 深度问题

WBOY
WBOYOriginal
2016-06-06 20:50:261249Durchsuche

<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>

回复内容:

<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>

本来这种问题,只需要你稍微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>

这个貌似不难吧,我用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>

递归的时候加上层级参数即可,每次递归参数都需要+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>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn