利用递归方法遍历文件存储到指定文件,为何不能遍历尽所有的指定文件?源码如下:

import java.io.*;
import java.util.*;
class FileDemo
{
public static void main(String[] args)
{
File dir=new File("D:");
//showDir(dir,0);
//sop(getSum(10));
//delFile(dir);
List list=new ArrayList();
fileToList(dir,list);
File file=new File(dir,"java文件列表.txt");
writeToFile(list,file.toString());

}
public static void writeToFile(List<File> list,String javaListFile){//创建文件写入输出流,将集合内文件的据对路径储到指定文件
    BufferedWriter bw=null;
    try{
        bw=new BufferedWriter(new FileWriter(javaListFile));
        for(File file:list){
            String path=file.getAbsolutePath();
            bw.write(path);
            bw.newLine();
            bw.flush();
        }
    }
    catch(IOException e){
            throw new RuntimeException("写入文件失败");
    }
    finally{
            try{
                if(bw!=null)
                    bw.close();
            }
            catch(IOException ex){
                throw new RuntimeException("流文件不存在");
            }
    }
}

public static void fileToList(File dir,List<File> list){//遍历目录,将指定文件存入到参数集合中
    File[] files=dir.listFiles();
    for(File file:files){
        if(file.isDirectory())
            fileToList(file,list);
        else{
            if(file.getName().endsWith(".java"))
                list.add(file);
        }
    }
}
}

你可以参考下改改

  import java.util.*;
import java.io.*;

public class ReadStringAndPrintPath 
{
    public static void main(String[] args) 
    {
        System.out.println("Hello World!");
        String str = "test";
        File file = new File("a");
        File[] list = file.listFiles();
        searchString(list,str);
    }
    public static void searchString(File[] files,String str){
        for(int i = 0 ; i < files.length; i ++){
            if(files[i].isFile()){
                //是文件,搜索是否存在字符串
                try{
                    Scanner scan = new Scanner(files[i]);
                    while(scan.hasNext()){
                        if(scan.nextLine().indexOf(str) != -1){
                            System.out.println(files[i].getAbsolutePath());
                            break;
                        }
                    }
                }catch(IOException ex){
                    ex.printStackTrace();
                }
            }else{
                //是文件夹
                File[] list = files[i].listFiles();
                searchString(list,str);
            }
        }
    }
}

丢失了哪些文件,看看是不是权限的问题,造成读取失败。

比如说怎么样的结构遍历不到?觉得逻辑没什么问题,倒是 File[] files=dir.listFiles();之后要检查一下files是否为null,否则遍历到空文件夹会有异常。

我D盘下又很多java文件,到现在为止,我还是没有找到没有遍历所有java文件的原因,时间紧迫,暂时不找了。有空了接着找原因!谢谢各位!