2013-06-24 74 views
0

我正在使用j2me進行移動應用程序的工作,我的要求是打印所有文件,包括其所有子目錄中的所有文件而無需遞歸,我已經使用遞歸完成它我遞歸的代碼是如何打印一個目錄中的所有文件,包括j2me中沒有遞歸的子目錄

public void pf1(String base_path1) throws IOException{ 

FileConnection fc1=(FileConnection) Connector.open(base_path1,Connector.READ_WRITE); 
Enumeration filelist=fc1.list(); 
String filename; 
while(filelist.hasMoreElements()){ 

filename=(String)filelist.nextElement(); 
fc1=(FileConnection)Connector.open(base_path1+filename,Connector.READ_WRITE); 
if(!fc1.isDirectory()){ 
    TotalFiles[TotalFileCount]=filename; 
    TotalFileCount++; 
    //System.out.println(filename); 
} 
else if(fc1.isDirectory()){ 

pf1(base_path1+filename); 

} 
} 


System.out.println(TotalFileCount); 

} 

請幫忙,如果有的話。在此先感謝

+0

只是好奇你爲什麼要這樣做,而沒有遞歸。你是否在擔心堆棧空間不足?這將幫助其他人瞭解是否/何時使用相同的方法將有助於他們的處境。它也可能導致與避免遞歸不同的解決方案。 – LarsH

回答

3

使堆棧顯式。我用僞代碼完成了這個工作,因爲這聽起來有點兒家常便利!您當前的結構有點像這樣:

public void List(Directory directory) { 
    forevery file in directory 
     if (isDirectory(file)) List(file) 
     else print(file) // recursion uses a stack 
} 

相反,你可以用你自己的堆棧進行調用堆棧明確。遞歸變成了一個while循環。

public void List(Directory directory) { 
    Stack directories = new Stack(); 
    directories.push(directory); 

    while(!directories.Empty()) { 
     Directory dir = directories.pop(); 

     forevery file in dir 
     if (IsDirectory(file)) directories.push(file) 
     else print(file); 
    } 
} 
+0

感謝您的回答傑夫。對於j2se這個代碼是好的,但在j2me沒有類型的文件和目錄,所以你不能計數files.please在j2me中提供代碼 – JohnH

+0

你已經在你的例子中有相同的代碼。我嘗試向您展示通用方法,以便您可以學習,而不僅僅是粘貼代碼:) –

+0

'public void List(String directory)throws IOException {} {stack_display = new Stack(); directories.push(directory); while(!directories.empty()){ String dir = directories.pop()。toString(); FileConnection fc1 =(FileConnection)Connector.open(directory,Connector.READ_WRITE);枚舉filelist = fc1.list(); String fn; while(filelist.hasMoreElements()){f1 =(String)filelist.nextElement(); fc1 =(FileConnection)Connector.open(directory + fn,Connector.READ_WRITE); if(fc1.isDirectory()){ directories.push(fn); } else {System.out.println(fn);}} } }'但它是從目錄打印文件而不是子目錄 – JohnH

相關問題