第一次在这里提问,多多关照啊~~~
遍历某个目录下的所有文件(网上找的)package org.koala.util;
import java.util.ArrayList;
import java.io.File;
public class DirList {
private static ArrayList<String> fileList = new ArrayList<String>();
/**
 * @param strPath 例如:dataLiterature\\book\\cnBook
 * @return strPath目录下文件的ArrayList
 */
public ArrayList<String> traversal(String strPath) {
File dir = new File(strPath);
File[] files = dir.listFiles();
if (files == null)
return null;
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
traversal(files[i].getAbsolutePath());
} else {
//String strFileName = files[i].getAbsolutePath().toLowerCase();
//System.out.println("---" + strFileName);
fileList.add(files[i].getName());
}
}
return fileList;
}
}在另一个类里面调用这个函数DirList fp=new DirList();
DirList pp=new DirList();
ArrayList<String> filePath = fp.traversal("dataLiterature\\book\\cnBook");
ArrayList<String> piclst = pp.traversal(picLiterature\\book\\cnBook\\);运行出现错误,调试了一下,发现filePath和piclst里面的元素一样,这个是什么原因?
我创建了两个DirList对象,应该互不影响,但是怎么会出现这个情况?
补充说明:在做抓网页的一个程序,把网页数据和图片数据抓下来分别保存起来,然后放到库里。

解决方案 »

  1.   

    有个地方写错了一点
    DirList fp=new DirList();
    DirList pp=new DirList();
    ArrayList<String> filePath = fp.traversal("dataLiterature\\book\\cnBook");
    ArrayList<String> piclst = pp.traversal(picLiterature\\book\\cnBook);
      

  2.   

    DirList fp=new DirList();
    DirList pp=new DirList();
    肯定会影响咯i
    这两个是一个意思!
      都是实例化出来一个DirList  对象!
      只是 对象名不一样而已1
      其实是一样的!
      

  3.   

    虽然是两个DirList 
    当之你的域
       private static ArrayList<String> fileList = new ArrayList<String>();
    是静态的,属于类,不属于对象。所以还是一个对象。
      

  4.   

    好好看看对象初始化吧,这是两个不同的对象,没有什么关系。lz的问题应该是出在DirList 这个类中,因为fileList 是个静态的成员变量,所有用到它的,调用的气势是一个对象,所以lz虽然是两次调用,但是因为调用的都是fileList这个对象,所以结果是一样的,lz可以试试在traversal这个方法中初始化fileList,这样就不会有问题了
      

  5.   

    2楼在误导吧
    ------------
    这两个是一个意思! 
      都是实例化出来一个DirList  对象! 
      只是 对象名不一样而已1 
      其实是一样的! 
    ---------------------这2个对象是不同的对象,但是由于fileList这个属性是静态变量,这个类的所有对象都共享这一个属性
      

  6.   

    因为fileList是static的,肯定影响了
      

  7.   

    4楼正解,当程序启动,先实例化static变量,并且只实例化一次,所以你得到的fileList是同一个,当然是一样的
    看看这个你就明白了
    import java.io.File;
    import java.util.ArrayList;
    import java.util.Iterator;
    public class TestFile {
    private static ArrayList<String> fileList = new ArrayList<String>();

        /**
         * @param strPath 例如:dataLiterature\\book\\cnBook
         * @return strPath目录下文件的ArrayList
         */
        public ArrayList<String> traversal(String strPath) {
            File dir = new File(strPath);
            File[] files = dir.listFiles();
            if (files == null)
                return null;
            for (int i = 0; i < files.length; i++) {
                if (files[i].isDirectory()) {
                    traversal(files[i].getAbsolutePath());
                } else {
                    //String strFileName = files[i].getAbsolutePath().toLowerCase();
                    //System.out.println("---" + strFileName);
                    fileList.add(files[i].getName());
                }
            }
            return fileList;
        }
        public static void main(String[] args) {
    // TODO Auto-generated method stub
         TestFile fp=new TestFile();
         TestFile pp=new TestFile();
         ArrayList<String> filePath = fp.traversal("D:\\antTest");
        
         Iterator it=filePath.iterator();
         while(it.hasNext()){
         System.out.println(it.next());
         }
         ArrayList<String> filePath1 = fp.traversal("D:\\fas");
         Iterator it1=filePath.iterator();
         while(it1.hasNext()){
         System.out.println(it1.next());
         } }

    }
      

  8.   

    呵呵,谢谢大家,后来我改了一下,好使了。package org.koala.util;import java.util.ArrayList;
    import java.io.File;public class DirList {
    private ArrayList<String> fileList = new ArrayList<String>();
    public DirList(){
    if(fileList!=null){
    fileList.clear();
    }
    }
    /**
     * @param strPath
     * @return strPath目录下文件的ArrayList
     */
    public ArrayList<String> traversal(String strPath) {
    File dir = new File(strPath);
    File[] files = dir.listFiles();
    for (int i = 0; i < files.length; i++) {
    if (files[i].isDirectory()) {
    traversal(files[i].getAbsolutePath());
    } else {
    //String strFileName = files[i].getAbsolutePath().toLowerCase();
    //System.out.println("---" + strFileName);
    fileList.add(files[i].getName());
    }
    }
    return fileList;
    }
    }
      

  9.   

    恩 明白了 后来把static去掉就好使了~~