这个问题很简单,但我的大脑沸腾了:((( 我知道,我应该递归功能,但我无法正确地组织它, 因为我受到类型的限制(这是一个要求)
public String[] getFiles(String initialDir) {}
首先在我的代码中,我获得了initialDir的文件和目录列表 然后我浏览元素并在
的帮助下查找目录.isDirectory()
然后我尝试组织递归,例如:
String [] buf = getFiles(Filelist[i].toString());
这里有麻烦。
主要问题是,确定获取数据的大小和分配 必要的String []类型数组,并进一步写入所有递归结果 并首先调用结果到结果String []类型的数组。
这真让我烦恼,所以我需要从侧面看一眼(也许有人会帮忙 函数中的代码。)
感谢所有人!
答案 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?的答案中复制而来的,它为您提供了您想要的所有答案。