我正在使用FileSystem程序中的递归方法。 FileSystem采用通用树的形状。我在常规树中有两种类型的文件:Directory
和TextFile
。
这是我的findFile
递归方法:
//Find any file by name
private File findFile(File f, String name){
if(f.getName().equals(name))
return f;
File file = null;
for(File c : ((Directory) f).getChildren()){
file = findFile(c, name);
if(file != null)
break;
}
return file;
}
我有一个File
类Directory
和TextFile
继承。我的getChildren()
方法仅在Directory
中,并返回ArrayList<File>
类型。
我遇到的问题是我制作了几个目录和文本文件。如果我将currentDirectory
更改为树中更深层的内容findFile
,则会抛出ClassCastException
。
我已经弄明白为什么会这样做,我会在这里说明一下:
D1
/ \
D2 D4
/ \ \
TF1 D3 D5
在此插图中,D
代表Directory
,TF
代表TextFile
。
创建TF1
之后,假设我想将工作目录更改为D4
。这将抛出ClassCastException
,因为findFile
是一个前序遍历。
无论如何,我可以调整此方法以识别TextFile
下一行,并跳过它以避免我的编程试图获取TextFile
的孩子?
答案 0 :(得分:0)
这应该有效:
private File findFile(File f, String name){
if(f.getName().equals(name))
return f;
File file = null;
if (f.isDirectory()) {
for(File c : ((Directory) f).getChildren()){
file = findFile(c, name);
if(file != null)
break;
}
}
return file;
}