package filePath;import java.io.File;
import java.util.ArrayList;public class SearchFile { static ArrayList<String> txtList =new ArrayList<String>();//请问这里为什么必须用static, 否则println的地方没有输出
static ArrayList<String> csvList =new ArrayList<String>(); public void filePathMain() throws Exception {

// 递归显示***下所有文件夹及其中文件
File files = new File("D:\\text2"); SearchFile searchfile = new SearchFile();
searchfile.showAllFiles(files);

System.out.println(txtList.get(0));//如果不是static 的话没有输出
} final void showAllFiles(File dir) throws Exception { File[] fs = dir.listFiles(); for (int i = 0; i < fs.length; i++) {
if (!fs[i].isDirectory()) {
String tmp = fs[i].getAbsolutePath();
/* search CSV */
int csvIndex = 0;
csvIndex = tmp.lastIndexOf(".csv");
if (csvIndex != -1) {
System.out.println(tmp);
csvList.add(tmp);
}
/* search TXT */
int txtIndex = 0;
txtIndex = tmp.lastIndexOf(".txt");
if (txtIndex != -1) {
System.out.println(tmp);
txtList.add(tmp);
}
}
if (fs[i].isDirectory()) {
showAllFiles(fs[i]);
}
}
}
}

解决方案 »

  1.   

    没有必须用啊,除非你这个类里面有static的方法
      

  2.   

    谢谢您的回答
    但是
    我用下面的方法调用这个class时如果不用static 就无法println呢?
    package filePath;public class Runn { /**
     * @param args
     * @throws Exception 
     */
    public static void main(String[] args) throws Exception {
    // TODO Auto-generated method stub SearchFile search_ = new SearchFile();
    search_.filePathMain();
    }
    }
      

  3.   

    D:\Adobe\Adobe Bridge CS5\db_support\install\share\english\errmsg.txt
    D:\Adobe\Adobe Bridge CS5\PublishPanel\factory\manifest_version.txt
    D:\Adobe\Adobe Bridge CS5\PublishPanel\locale\ar\strings.txt
    D:\Adobe\Adobe Bridge CS5\PublishPanel\locale\cs\strings.txt
    D:\Adobe\Adobe Bridge CS5\PublishPanel\locale\da\strings.txt
    D:\Adobe\Adobe Bridge CS5\PublishPanel\locale\de\strings.txt
    D:\Adobe\Adobe Bridge CS5\PublishPanel\locale\el\strings.txt
    D:\Adobe\Adobe Bridge CS5\PublishPanel\locale\en\strings.txt
    D:\Adobe\Adobe Bridge CS5\PublishPanel\locale\es\strings.txt
    D:\Adobe\Adobe Bridge CS5\PublishPanel\locale\fi\strings.txt
    D:\Adobe\Adobe Bridge CS5\PublishPanel\locale\fr\strings.txt
    D:\Adobe\Adobe Bridge CS5\PublishPanel\locale\he\strings.txt
    D:\Adobe\Adobe Bridge CS5\PublishPanel\locale\hu\strings.txt
    D:\Adobe\Adobe Bridge CS5\PublishPanel\locale\it\strings.txt
    D:\Adobe\Adobe Bridge CS5\PublishPanel\locale\ja\strings.txt
    D:\Adobe\Adobe Bridge CS5\PublishPanel\locale\ko\strings.txt
    D:\Adobe\Adobe Bridge CS5\PublishPanel\locale\nb\strings.txt
    D:\Adobe\Adobe Bridge CS5\PublishPanel\locale\nl\strings.txt
    D:\Adobe\Adobe Bridge CS5\PublishPanel\locale\pl\strings.txt
    D:\Adobe\Adobe Bridge CS5\PublishPanel\locale\pt\strings.txt
    D:\Adobe\Adobe Bridge CS5\PublishPanel\locale\ro\strings.txt
    D:\Adobe\Adobe Bridge CS5\PublishPanel\locale\ru\strings.txt
    D:\Adobe\Adobe Bridge CS5\PublishPanel\locale\sv\strings.txt
    D:\Adobe\Adobe Bridge CS5\PublishPanel\locale\tr\strings.txt
    我测试过,加和不加完全没区别
      

  4.   

    相信您的回复
     ArrayList<String> txtList =new ArrayList<String>();
     ArrayList<String> csvList =new ArrayList<String>();
    但是我去掉static后,得到以下结果
    Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.rangeCheck(Unknown Source)
    at java.util.ArrayList.get(Unknown Source)
    at filePath.SearchFile.filePathMain(SearchFile.java:19)
    at filePath.Runn.main(Runn.java:13)
    Picked up _JAVA_OPTIONS: -Duser.language=en
      

  5.   

    searchfile.showAllFiles(files);
    这一句中的searchfile去掉,改为showAllFiles(files)试试。
      

  6.   

    你的showAllFiles是在searchfile中添加内容,打印的时候打印this对象中的ArrayList。如果是static的话是共享的,无所谓,但如果不是static的实际上每一个object都有一份List。
      

  7.   

        public void filePathMain() throws Exception {        // 递归显示***下所有文件夹及其中文件
            File files = new File("E:\\temp");        SearchFile searchfile = new SearchFile();
            searchfile.showAllFiles(files);        System.out.println(txtList.get(0));// 如果不是static 的话没有输出
        }        SearchFile searchfile = new SearchFile();
            searchfile.showAllFiles(files);
    查找结束后,文件路径是放在searchfile的txtList中,而不是当前对象的txtList中。

            SearchFile searchfile = new SearchFile();
            searchfile.showAllFiles(files);
    改成
            showAllFiles(files);
    就可以了。
      

  8.   

    ++
    建议楼主先了解一下static关键字  这个也是比较常见常用的