A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小田 中级黑马   /  2015-5-17 23:25  /  2960 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

3黑马币
/**
递归:列出E盘下的所有文件
*/
package io;
import java.io.*;
class DiGui
{
        public static void main(String[] args) throws IOException
        {
                File f=new File("D:\\java2015226");
                method(f);
        }
        public static void method(File f)throws IOException
        {
                File[] fs=f.listFiles();
                System.out.println(f.toString());
                for (int x=0;x<fs.length ;x++ )
                {
                        if (fs[x].isDirectory())
                        {
                                method(fs[x]);
                        }
                        else
                        {
                                System.out.println(fs[x]);
                        }
                }
        }       
}
求帮助,我想讲列出的文件写入到e盘下的1.txt文件下,但是我用System.setOut();设置后程序运行会出现空指针异常,求解?求代码!

最佳答案

查看完整内容

我表示运行的完全正常

9 个回复

倒序浏览
我表示运行的完全正常

  1. package algorithm;
  2. import java.io.*;
  3. class DiGui
  4. {
  5.         public static void main(String[] args) throws IOException
  6.         {
  7.                 File srcDir=new File("D:\\downloads");
  8.                 File destFile=new File("E:\\1.txt");
  9.                 if(!destFile.exists())
  10.                         destFile.createNewFile();
  11.                 System.setOut(new PrintStream(destFile));
  12.                 method(srcDir,0);
  13.         }
  14.         public static void method(File f,int level)throws IOException
  15.         {
  16.                 File[] fs=f.listFiles();
  17.                 for(int i=0;i<level;i++)
  18.                         System.out.print("  ");
  19.                 System.out.println(f.toString());
  20.                 for (int x=0;x<fs.length ;x++ )
  21.                 {
  22.                         if (fs[x].isDirectory())
  23.                         {
  24.                                 method(fs[x],level+1);
  25.                         }
  26.                         else
  27.                         {
  28.                                 for(int i=0;i<level;i++)
  29.                                     System.out.print("  ");
  30.                                 System.out.print("!---");
  31.                             System.out.println(fs[x]);
  32.                         }
  33.                 }
  34.         }        
  35. }
复制代码
回复 使用道具 举报
1.txt是否存在 不存在的情况下你是否创建
回复 使用道具 举报
2666fff 发表于 2015-5-18 00:58
1.txt是否存在 不存在的情况下你是否创建

不存在就建立,存在就覆盖
回复 使用道具 举报
效果图:

回复 使用道具 举报
  1. import java.io.*;
  2. class test
  3. {
  4.         public static void main(String[] args) throws IOException
  5.         {
  6.                 File f=new File("D:\\Java\\jdk1.8");
  7.                 method(f);
  8.         }
  9.         public static void method(File f)throws IOException
  10.         {
  11.                 FileWriter fw = new FileWriter("D:\\\\1.txt");
  12.                 BufferedWriter bw = new BufferedWriter(fw);
  13.                 File[] fs=f.listFiles();
  14.                 System.out.println(f.toString());
  15.                 for (int x=0;x<fs.length ;x++ )
  16.                 {
  17.                         if (fs[x].isDirectory())
  18.                         {
  19.                                 method(fs[x]);
  20.                         }
  21.                         else
  22.                         {
  23.                                 //System.out.println(fs[x]);
  24.                                 bw.write(fs[x].toString(),0,fs[x].toString().length());//用FileWriter类代替输出
  25.                                 bw.flush();
  26.                                 bw.newLine();
  27.                         }
  28.                 }
  29.         }      
  30. }
复制代码
回复 使用道具 举报

第11行代码处  FileWriter fw = new FileWriter("D:\\\\1.txt");  FileWriter的构造方法传路径,应该用两道杠吧\\   ?还是说这种格式也行?
回复 使用道具 举报
as604049322 发表于 2015-5-17 23:25
我表示运行的完全正常

请问 如果目标文件夹下,有一个空文件夹,第十七行代码File[] fs=f.listFiles();可以执行,但是到了第23行后 这一句method(fs[x],level+1); 调用空文件夹里的第一一个文件fs[0],应该会报索引越界或者空指针异常吧?



public class OutputStreamDemo {
        public static void main(String[] args) throws IOException {
                File file=new File("测试");//一个空文件夹
                System.out.println(file.isDirectory());
                File[] files=file.listFiles();
                System.out.println(files);
                System.out.println(files[0]);
        }
}
这是我测试的结果,报了这个错误 ArrayIndexOutOfBoundsException: 0
回复 使用道具 举报
君子无醉 发表于 2015-5-23 05:12
请问 如果目标文件夹下,有一个空文件夹,第十七行代码File[] fs=f.listFiles();可以执行,但是到了第23行后 ...

for (int x=0;x<fs.length ;x++ )在遍历文件夹下的没一个元素,如果是空的,fs.length就等于0,不会进入for循环

点评

懂了 想的不够全 谢谢。  发表于 2015-5-23 15:18
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马