由于单位服务器较大,使用递归的时候遍历程序 导致堆栈溢出的异常,从而 借鉴网上的朋友们 编写的 非递归遍历的本地文件夹改写的遍历ftp文件夹。 /** * 非递归方式遍历文件夹 * @param path */ public void scanDirNoRecursion(String path){ //将某个磁阵目录 获得下面所有的文件夹和文件 List list = listFiles(path); //由于遍历需要重复删除操作集合 所以使用链表结构 LinkedList llist = new LinkedList(list); //如果集合不为空 则遍历 while(!llist.isEmpty()){ //删除集合的第一个元素并且得到 String firstpath = llist.removeFirst().toString(); System.out.println(firstpath); //如果是个文件(相对) if(firstpath.indexOf(".") != -1){ continue; } //如果是个目录 else { //获得改目录下的所有文件夹或文件 list = listFiles(firstpath); //***将其遍历 for(int i = 0; i < list.size();i++){ //如果是文件(相对) if(list.get(i).toString().indexOf(".") != -1){ continue; } else{ //***添加到 链表的末尾处(来保证 下一次循环以同样方式判断 以及遍历,从而得到递归效果) llist.add(list.get(i)); } } } } } /** * 获得路径下所有的文件 * @param path * @return */ public List listFiles(String path){ List list = new ArrayList(); String filename = null; try { DataInputStream diss = new DataInputStream(ftpClient.nameList(path)); while((filename =diss.readLine()) != null){ list.add(filename); } } catch (IOException e) { File file = new File("d:/scanServer.txt"); try { BufferedWriter bw = new BufferedWriter(new FileWriter(file,true)); bw.write(filename); bw.flush(); bw.close(); } catch (IOException e1) { e1.printStackTrace(); } } return list; }