当前位置:  开发笔记 > 编程语言 > 正文

如何用Java扫描文件夹?

如何解决《如何用Java扫描文件夹?》经验,为你挑选了4个好方法。

如何在Java中以递归方式列出文件夹中的所有文件?



1> volley..:

不确定你想如何表示树?无论如何这里是一个使用递归扫描整个子树的例子.文件和目录是相同的.请注意,File.listFiles()为非目录返回null.

public static void main(String[] args) {
    Collection all = new ArrayList();
    addTree(new File("."), all);
    System.out.println(all);
}

static void addTree(File file, Collection all) {
    File[] children = file.listFiles();
    if (children != null) {
        for (File child : children) {
            all.add(child);
            addTree(child, all);
        }
    }
}

Java 7提供了一些改进.例如,DirectoryStream一次提供一个结果 - 调用者不再需要在执行之前等待所有I/O操作完成.这允许增量GUI更新,提前取消等.

static void addTree(Path directory, Collection all)
        throws IOException {
    try (DirectoryStream ds = Files.newDirectoryStream(directory)) {
        for (Path child : ds) {
            all.add(child);
            if (Files.isDirectory(child)) {
                addTree(child, all);
            }
        }
    }
}

请注意,dreaded null返回值已被IOException替换.

Java 7还提供了一个树木漫步者:

static void addTree(Path directory, final Collection all)
        throws IOException {
    Files.walkFileTree(directory, new SimpleFileVisitor() {
        @Override
        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
                throws IOException {
            all.add(file);
            return FileVisitResult.CONTINUE;
        }
    });
}


是的,这就像一个反复出现的噩梦......:P~

2> OscarRyz..:
import java.io.File;
public class Test {
    public static void main( String [] args ) {
        File actual = new File(".");
        for( File f : actual.listFiles()){
            System.out.println( f.getName() );
        }
    }
}

它显示模糊的文件和文件夹.

请参阅File类中的方法以对它们进行排序或避免目录打印等.

http://java.sun.com/javase/6/docs/api/java/io/File.html



3> Brandon DuRe..:

查看Apache Commons FileUtils(listFiles,iterateFiles等).用于做你想做的事情和应用过滤器的便利方法.

http://commons.apache.org/io/api-1.4/org/apache/commons/io/FileUtils.html


雅,我讨厌使用经过测试的库,它们包含超过10行的函数.
没有什么能像吸吮庞大的图书馆来解决问题一样,而不是用10行代码来解决问题.

4> Leonel..:

您还可以使用FileFilter界面过滤掉您想要的内容.最好在创建实现它的匿名类时使用它:

import java.io.File;
import java.io.FileFilter;

public class ListFiles {
    public File[] findDirectories(File root) { 
        return root.listFiles(new FileFilter() {
            public boolean accept(File f) {
                return f.isDirectory();
            }});
    }

    public File[] findFiles(File root) {
        return root.listFiles(new FileFilter() {
            public boolean accept(File f) {
                return f.isFile();
            }});
    }
}

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有