Java中的文件列表。焕然一新

时间:2012-02-24 11:44:59

标签: java string file recursion directory

这个问题很简单,但我的大脑沸腾了:((( 我知道,我应该递归功能,但我无法正确地组织它, 因为我受到类型的限制(这是一个要求)

public String[] getFiles(String initialDir) {}

首先在我的代码中,我获得了initialDir的文件和目录列表 然后我浏览元素并在

的帮助下查找目录
.isDirectory()

然后我尝试组织递归,例如:

String [] buf = getFiles(Filelist[i].toString());

这里有麻烦。

主要问题是,确定获取数据的大小和分配 必要的String []类型数组,并进一步写入所有递归结果 并首先调用结果到结果String []类型的数组。

这真让我烦恼,所以我需要从侧面看一眼(也许有人会帮忙 函数中的代码。)

感谢所有人!

2 个答案:

答案 0 :(得分:3)

您可以在方法体中使用列表,然后将其转换为数组:

public String[] getFiles(String initialDir) {
   List<String> files = new ArrayList<String>();
   ...
       files.add(aLovelyFile);
   ...
       String[] moarFiles = getFiles(aLovelyDirectory);
       files.addAll(Arrays.asList(moarFiles));
   ...
   return files.toArray(new String[0]);
}

答案 1 :(得分:1)

如果这不是作业,请查看Apache Commons,特别是FileUtils#ListFiles

  

查找给定目录中的文件(以及可选的目录)   子目录)。找到的所有文件都由IOFileFilter过滤。如果   你的搜索应该递归到你可以传入的子目录中   IOFileFilter用于目录。你不需要绑定一个   DirectoryFileFilter(通过逻辑AND)到此过滤器。这种方法可以   适合你。

     

示例:如果要搜索所有名为的目录   你在FileFilterUtils.NameFileFilter(“temp”)

中传递的“temp”

这会返回Collection<File>。可能正是你想要的。当然,如果您需要返回一个数组,最后请使用.toArray()

如果你真的必须使用数组,并且它仍然不是功课,那么你可以使用Apache commons lang连接两个数组:

String[] both = (String[]) ArrayUtils.addAll(first, second);

以上内容是从How to concatenate two arrays in Java?的答案中复制而来的,它为您提供了您想要的所有答案。