2015-12-11 38 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