通过java中的目录递归,我想跳过顶层的一个步骤

时间:2014-12-03 19:55:47

标签: java recursion

我试图以递归方式输出目录中的文件列表(不包括我开始使用的目录名称的名称(只是它的内容以及之后在树中递归的所有文件)

这是我现在所拥有的。它可能在这里和那里有错误,但想法是它将以递归方式打印树中每个文件的所有名称。我的问题是我不希望它打印出他们所居住的目录的名称。

我认为我的问题是我在递归方法的开头使用System.out.println,这意味着它每次都被使用。对于第一个目录下面的每个目录,这是理想的行为。这是一个烦人的小问题,我可以使用一些帮助。提前谢谢。

public static void listFiles(String path)
{
    File basedir = new File(path);

    System.out.println(path.getName());

    try
    {
        File[] files = basedir.listFiles();

        for (File file : files)
        {
            // If Dealing with a directory, call recursively to the function
            if (file.isDirectory())
            {
                listFiles(file.getPath());
            }
            else
            {
                System.out.println(file.getName());
            }
        }
    }
    catch(IOException ex)
    {
        System.out.println(ex);
    }
}

1 个答案:

答案 0 :(得分:0)

public static void listFiles(String path, boolean firstCall)
{
    File basedir = new File(path);
    if(!firstCall)
    {
       System.out.println(path.getName());
    }

    try
    {
        File[] files = basedir.listFiles();

        for (File file : files)
        {
            // If Dealing with a directory, call recursively to the function
            if (file.isDirectory())
            {
                listFiles(file.getPath(), false); //false here because it is not the first call
            }
            else
            {
                System.out.println(file.getName());
            }
        }
    }
    catch(IOException ex)
    {
        System.out.println(ex);
    }
}

添加一个布尔参数,指定它是否是第一个调用。当您调用方法时,将true传递给参数。另外path.getName()无效字符串没有函数getName()也许你的意思是basedir.getName() ...也删除了try catch块IOException不能在那里出现。