首页 > 解决方案 > 我怎样才能让这段代码最终打印一条语句,告诉是否至少有一个匹配项或文件不存在?

问题描述

在这里,我要做的是打印一个最终声明,以判断是否找到了文件。我尝试过布尔标志,但由于递归方式而没有与我一起使用。我只需要使用递归的解决方案。这是代码:

   public static void searchForFile(File dir, String target) {
        // If dir is not a directory, return
        if (!dir.isDirectory()) {
            System.out.println("Path is not a directory.");
            System.exit(0);
        }

        // Check each item in the directory
        for (File folderItem : dir.listFiles()) {
            // Recurse if it's a directory
            if (folderItem.isDirectory()) {
                searchForFile(folderItem,target);
            } else {
                // If it's a file, check for a match
                if (folderItem.getName().equals(target)) {
                    System.out.println(folderItem.getAbsolutePath());
                }
            }
        }
    }

    public static void main(String[] args)
    {
        // The root folder to search
        File rootFolder = new File("/Users/markDev/Desktop/path");
        searchForFile(rootFolder, "test.txt");
    }

标签: javaandroidfilerecursiondepth

解决方案


当您使用递归时,您应该在这种情况下返回!dir.isDirectory而不是像这样退出System.exit(0);

如果要打印每个匹配项的父文件夹,则应使用folderItem.getParentFile().getAbsolutePath()

    public static void searchForFile(File dir, String target) {
        // If dir is not a directory, return
        if (!dir.isDirectory()) {
            return;
        }

        // Check each item in the directory
        for (File folderItem : dir.listFiles()) {
            // Recurse if it's a directory
            if (folderItem.isDirectory()) {
                searchForFile(folderItem,target);
            } else {
                // If it's a file, check for a match
                if (folderItem.getName().equals(target)) {
                    System.out.println(folderItem.getParentFile().getAbsolutePath());
                }
            }
        }
    }

希望它能解决你的问题:)


推荐阅读