gpt4 book ai didi

java - 将工作代码转换为递归方法

转载 作者:行者123 更新时间:2023-12-01 13:57:26 25 4
gpt4 key购买 nike

大家好,我需要创建一个方法来显示当前目录、文件、子目录以及这些子目录的文件(给定用户必须选择的文件)。我完成了任务,下面的代码正在打印适当的输出。它是从 f.getParentFile() 向下打印,这就是想要的。现在我想改用递归。我正在尝试学习递归的概念。我知道您需要一个基本案例,然后需要归纳步骤,但是当我尝试将代码修改为递归时,当它到达第一个子目录时,我会遇到无限循环。任何反馈将不胜感激。

非递归工作代码

static void listFiles(File f)
{
try
{
if (f.exists())
{
File dir = f.getParentFile();

if (dir.isDirectory())
{
System.out.println("Directory: " + dir );

File[] list = dir.listFiles();
for (int i = 0; i < list.length; i++)
{
if (list[i].isDirectory())
{
System.out.println("\tSubdirectory: " + list[i].getName() + "\tsize :" + (list[i].length()/1024) + "KB" );
File[] listFiles = list[i].getAbsoluteFile().listFiles();
for (int j = 0; j < listFiles.length; j++)
{
System.out.println("\t\tSubdirectory files: " + listFiles[j].getName() + "\tsize :" + (listFiles[j].length()/1024) + "KB" );
}
}
else if (list[i].isFile())
{
System.out.println("\tFiles: " + list[i].getName() + "\tsize :" + (list[i].length()/1024) + "KB" );
}
}
}
}
else throw new FileNotFoundException("File ******** does not exists");
}
catch(NullPointerException | FileNotFoundException e)
{
e.printStackTrace();
}
}

尝试递归

static void listFiles(File f)
{
try
{
if (f.exists())
{
File dir = f.getParentFile();

if (dir.isDirectory())
{
System.out.println("Directory: " + dir );

File[] list = dir.listFiles();
for (int i = 0; i < list.length; i++)
{
if (list[i].isDirectory())
{
System.out.println("\tSubdirectory: " + list[i].getName() + "\tsize :" + (list[i].length()/1024) + "KB" );
listFiles(list[i].getAbsoluteFile());
}
else if (list[i].isFile())
{
System.out.println("\tFiles: " + list[i].getName() + "\tsize :" + (list[i].length()/1024) + "KB" );
}
}
}
}
else throw new FileNotFoundException("File ******** does not exists");
}
catch(NullPointerException | FileNotFoundException e)
{
e.printStackTrace();
}
}

最佳答案

这真的很简单:)

public static void main(String[] args) {
filesInFolder("./");
}

public static void filesInFolder(String filename) {
File dir = new File(filename);
for (File child : dir.listFiles()) {
System.out.println(child.getAbsolutePath());
if (child.isDirectory()){
filesInFolder(child.getAbsolutePath());
}
}
}

关于java - 将工作代码转换为递归方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19555589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com