Java me 如何在j2me中不递归地打印目录(包括子目录)中的所有文件

Java me 如何在j2me中不递归地打印目录(包括子目录)中的所有文件,java-me,Java Me,我正在开发一个移动应用程序(使用j2me),我的要求是打印一个目录中的所有文件,包括它的所有子目录,而不使用递归,我已经使用递归完成了。我的递归代码在这里 public void pf1(String base_path1) throws IOException{ FileConnection fc1=(FileConnection) Connector.open(base_path1,Connector.READ_WRITE); Enumeration filelist=fc1.lis

我正在开发一个移动应用程序(使用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);

}

如果有的话,请帮忙。提前感谢

明确堆栈。我已经用伪代码完成了,因为这听起来有点像家庭作业!您当前的结构有点像这样:

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);
    }
}

使堆栈显式。我已经用伪代码完成了,因为这听起来有点像家庭作业!您当前的结构有点像这样:

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);
    }
}

谢谢你的回答,杰夫。对于j2se来说,这段代码很好,但在j2me中没有类似文件和目录的类型,因此不能计算文件数。请提供j2me中的代码。在您的示例中,您已经获得了等效的代码。我试图向您展示通用方法,以便您可以学习而不仅仅是粘贴代码:)
public void List(String directory)抛出IOException{Stack directories=new Stack();directories.push(directory);而(!directories.empty()){String dir=directories.pop().toString();FileConnection fc1=(FileConnection)Connector.open(目录,Connector.READ_-WRITE);枚举filelist=fc1.list();String fn;while(filelist.hasMoreElements()){fn=(String)filelist.nextElement();fc1=(FileConnection)Connector.open(directory+fn,Connector.READ_-WRITE);if(fc1.isDirectory()){directory.push(fn);}else{System.out.println(fn);}}}
但它是从目录而不是子目录打印文件我已经基于堆栈方法粘贴了代码,但它并不是打印所有文件,包括子目录,请帮助。感谢您的回答jeff。对于j2se,此代码很好,但在j2me中没有类似文件和目录的类型,因此您无法计算文件。请在中提供代码J2ME您的示例中已经有了等效的代码。我试图向您展示通用方法,以便您可以学习而不仅仅是粘贴代码:)
public void List(String directory)抛出IOException{Stack directories=new Stack();directories.push(directory);而(!directories.empty()){String dir=directories.pop().toString();FileConnection fc1=(FileConnection)Connector.open(directory,Connector.READ_WRITE);枚举filelist=fc1.list();String fn;while(filelist.hasMoreElements()){fn=(String)filelist.nextElement();fc1=(FileConnection)Connector.open(directory+fn,Connector.READ_WRITE);if(fc1.isDirectory()){directory.push(fn);}else{System.out.println(fn);}})}
但它是从目录而不是子目录打印文件我已经基于堆栈方法粘贴了代码,但它不是打印所有文件,包括子目录,请帮助。只是好奇为什么要不递归地执行此操作。您是否担心堆栈空间不足?这将有助于其他人了解相同的方法是否/何时对他们的情况有帮助。这也可能导致一种不同于避免递归的解决方案。只是好奇为什么要在没有递归的情况下这样做。您是否担心堆栈空间不足?这将有助于其他人了解相同的方法是否/何时对他们的情况有帮助。它还可能导致与避免递归不同的解决方案。