//遍历文件夹路径
   //------------------------------------------用id查询文件夹集合
public List<Docom> chaxun(Integer id)throws ServletException,IOException{
DocomDao ddd = new DocomDao();
List<Docom> list = new ArrayList<Docom>();
Connection conn = null;
try{
conn = util.GetConn.getConnection();
list = ddd.select_upid(id);//用id查询所有子文件夹
if(list.size()>0){
list = suo(list);
}

}catch (Exception e) {
e.printStackTrace();
} finally {
util.GetConn.release(null, null, conn);
}
return list;
}
  //---------------------------------------------用集合查询所有子文件夹
public List<Docom> suo(List<Docom> lists){
Connection conn1 = null;
List<Docom> list1 = new ArrayList<Docom>();
DocomDao ddd1 = new DocomDao();
try{
conn1 = util.GetConn.getConnection();
for(int i=0 ; i< lists.size(); i++){
list1 = ddd1.select_upid(lists.get(i).getId());//用id查询所有子文件夹
if(list1.size()>0){
                                list1 = suo(list1);//调用for外面的函数
        list1.addAll(list1);
}

}
}catch (Exception e) {
e.printStackTrace();
  } finally {
util.GetConn.release(null, null, conn1);
}
return lists;
}
//-------------------------------------------------------------------
public static void main(String[] args)throws Exception{
List<Docom> list = new ArrayList<Docom>();
DocomServlet doc = new DocomServlet();
list = doc.chaxun(5);
for(int i=0;i<list.size();i++){
System.out.println(list.get(i).getId());
}
}这段代码运行后什么都不显示

解决方案 »

  1.   

    public List <Docom> suo(List <Docom> lists){ 
    Connection conn1 = null; 
    List <Docom> list1 = new ArrayList <Docom>(); 
    DocomDao ddd1 = new DocomDao(); 
    try{ 
    conn1 = util.GetConn.getConnection(); 
    for(int i=0 ; i < lists.size(); i++){ 
    list1 = ddd1.select_upid(lists.get(i).getId());//用id查询所有子文件夹 
    if(list1.size()>0){ 
            list1 = suo(list1);//调用for外面的函数 
            list1.addAll(list1);
    } } 
    }catch (Exception e) { 
    e.printStackTrace(); 
    } finally { 
    util.GetConn.release(null, null, conn1); 
    }
    return list1;
    } 原程序这里是  return list1;
      

  2.   

      你代码肯定是有问题的。
    1:conn1在哪用到了?
    2:list1 = suo(list1);//调用for外面的函数 
       list1.addAll(list1); 
    你这是要做什么?list1加一倍?
    //---------------------------------------------用集合查询所有子文件夹 
    public List <Docom> suo(List <Docom> lists){ 
    Connection conn1 = null; 
    List <Docom> list1 = new ArrayList <Docom>(); 
    DocomDao ddd1 = new DocomDao(); 
    try{ 
    conn1 = util.GetConn.getConnection(); 
    for(int i=0 ; i < lists.size(); i++){ 
    list1 = ddd1.select_upid(lists.get(i).getId());//用id查询所有子文件夹 
    if(list1.size()>0){ 
                                    list1 = suo(list1);//调用for外面的函数 
            list1.addAll(list1); 
    } } 
    }catch (Exception e) { 
    e.printStackTrace(); 
    } finally { 
    util.GetConn.release(null, null, conn1); 

    return lists; 
      

  3.   

    public List<Docom> suo(List<Docom> lists){
    List<Docom> list1 = new ArrayList<Docom>();
    List<Docom> list2 = new ArrayList<Docom>();
    DocomDao ddd1 = new DocomDao();
    try{
    for(int i=0 ; i< lists.size(); i++){
    list1.addAll(ddd1.select_upid(lists.get(i).getId())) ;
    if(list1.size()>0){
    list2.addAll(suo(list1)); //调用for外面的函数
    list1.addAll(list2);
       }
    }
    }catch (Exception e) {
    e.printStackTrace();
    }
    return list1;
    }
    我改了一下,可以查到了,但到第三层的时候重复的太多了
      

  4.   

    用Set(比如HashSet)代替List(ArrayList),可避免重复。
      

  5.   

    不是用什么的问题,是那个for里的递归有问题,应该可以找到一个合适的写法的
      

  6.   

    public List<Docom> suo(List<Docom> lists){
    List<Docom> list1 = new ArrayList<Docom>();
    List<Docom> list2 = new ArrayList<Docom>();
    List<Docom> list3 = new ArrayList<Docom>();
    DocomDao ddd1 = new DocomDao();
    try{
    for(int i=0 ; i < lists.size(); i++){
    list1 = ddd1.select_upid2(lists.get(i).getId());
    list3.addAll(list1);
    if(list1.size()>0){
     list2 = (suo(list1));//并不是调用for外面的函数,而是继续向深层调用
     list3.addAll(list2);
       }
    }
    }catch (Exception e) {
    e.printStackTrace();
    }
    return list3;
    }
    第二天了,终于搞懂了,查询的一个不多,一个不少。很好,很迅速