如何在目录/文件夹中找到子目录?

23

我正在寻找一种方法,可以获取指定目录下所有文件夹的名称,但不包括文件。

例如,假设我有一个名为Parent的文件夹,里面有3个文件夹:Child1Child2Child3

我想要获取这些文件夹的名称,但不关心它们的内容或者Child1、Child2等子文件夹的名称。

是否有一种简单的方法可以实现这个功能?


你知道它可能有多少个级别吗?或者它可以是任何数字吗? - Adude11
@Quoi 不,这不是为了作业。 - iaacp
@Aaron,它不应该超过2个级别。意思是一个父文件夹,一个子文件夹,然后就不应该再深入了。 - iaacp
3个回答

24

如果你正在使用Java 7,可以尝试使用提供的支持。

package java.nio.file 
如果您的目录中有许多条目,它将能够在不先将它们全部读入内存的情况下开始列出它们。详见javadoc:http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#newDirectoryStream(java.nio.file.Path,%20java.lang.String) 以下是已针对您需要进行了调整的示例:
public static void main(String[] args) {
    DirectoryStream.Filter<Path> filter = new DirectoryStream.Filter<Path>() {
        @Override
        public boolean accept(Path file) throws IOException {
            return (Files.isDirectory(file));
        }
    };

    Path dir = FileSystems.getDefault().getPath("c:/");
    try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, filter)) {
        for (Path path : stream) {
            // Iterate over the paths in the directory and print filenames
            System.out.println(path.getFileName());
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

1
在Java 8上,您可以简化为:Files.newDirectoryStream(dir,p -> Files.isDirectory(p))。 - Matt Sidesinger

23
你可以使用String[] directories = file.list()列出所有文件名,然后使用循环检查每个子文件,并使用file.isDirectory()函数获取子目录。
例如:
File file = new File("C:\\Windows");
String[] names = file.list();

for(String name : names)
{
    if (new File("C:\\Windows\\" + name).isDirectory())
    {
        System.out.println(name);
    }
}

"C\\Windows\\" 是什么意思?list() 返回 absolutePath - Mordechai
听起来很不错!如果我不确定路径到某个特定点会是什么样子,比如说"..\Projects\Tests\Test1"是唯一已知的目录部分,我还能用这种方式吗? - iaacp
你的意思是输入将会是一个相对路径吗?因为如果我们不提供绝对路径,程序将把它视为相对于运行程序当前路径的相对路径。例如,如果程序路径是 C:\\Project\\Test,而我们输入一个路径名 abc,那么程序将把它视为 C:\\Project\\Test\\abc - bhuang3
@bhuang3 抱歉,我不太清楚。如果我不知道项目目录之前的路径怎么办?我想在多台计算机上运行它,但每次都从我的Eclipse项目中运行。当初始化时,我的文件对象会是什么样子? - iaacp

1
public static void displayDirectoryContents(File dir) {
    try {
        File[] files = dir.listFiles();
        for (File file : files) {
            if (file.isDirectory()) {
                System.out.println("Directory Name==>:" + file.getCanonicalPath());
                displayDirectoryContents(file);
            } else {
                System.out.println("file Not Acess===>" + file.getCanonicalPath());
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}

====在类/方法内提供文件=URL=====

    File currentDir = new File("/home/akshya/NetBeansProjects/");
    displayDirectoryContents(currentDir);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接