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

递归遍历目录 深度问题

WBOY
Freigeben: 2016-06-06 20:50:26
Original
1252 Leute haben es durchsucht

<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>
Nach dem Login kopieren
Nach dem Login kopieren

回复内容:

<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>
Nach dem Login kopieren
Nach dem Login kopieren

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

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

递归的时候加上层级参数即可,每次递归参数都需要+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>
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage