2015-12-11 23 views
0

我正在处理我的FileSystem程序中的递归方法。文件系统采用通用树的形状。我在一般树中有两种类型的文件:DirectoryTextFile递归常规树方法ClassCastException

这里是我的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; 
} 

我有一个FileDirectoryTextFile继承。我的getChildren()方法仅在Directory中返回ArrayList<File>类型。

我遇到的问题是一旦我做了几个目录和文本文件。如果我将currentDirectory更改为更深的树findFile将抛出ClassCastException

我已经想通了,为什么它这样做,我会在这里说明吧:

 D1 
    / \ 
    D2  D4 
/\  \ 
TF1 D3  D5 

在这个插图D代表一个Directory,并TF代表一个TextFile

TF1刚创建后,假设我想将我的工作目录更改为D4。这将抛出ClassCastException,因为findFile是预先遍历的。

是否有反正我可以调整这种方法来识别TextFile当它在下一行,并跳过它,以避免我的编程试图获得TextFile的孩子?

回答

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; 
} 
+0

谢谢!现在一切正常。 @cybersam – Aragorn300