黑马程序员技术交流社区

标题: 代码请教 [打印本页]

作者: Friends★    时间: 2012-7-25 23:21
标题: 代码请教
需求:就是把指定目录下的以.java结尾的文件的目录打印到一个指定的文本中。
也不知道哪里错了,编译和运行也没有报错,但结果就是出不来,请各位帮我解决一下。谢谢了!

public class IoTest {
        public static void main(String[] args) throws IOException {
                PrintWriter pw = new PrintWriter(new FileWriter("f:\\a.txt"),true);
                File f = new File("f:\\");
                toFile(f, pw);
        }

        public static void toFile(File dir, PrintWriter pw) throws IOException {
                File[] files = dir.listFiles();
                //通过递归判断
                for (File file : files) {
                        if (file.isDirectory()) {
                                toFile(file, pw);
                                //把指定目录下.java结尾的文件找出来,并打印到指定的文件中
                        } else if (file.getName().endsWith(".java")) {

                                //得到路劲名
                                String str = file.getAbsolutePath();
                                pw.println(str);
                        }
                }
                pw.close();
        }
}



作者: 王志明    时间: 2012-7-25 23:43
本帖最后由 王志明 于 2012-7-26 00:36 编辑

if (file.isDirectory()) {
        toFile(file, pw);
        // 把指定目录下.java结尾的文件找出来,并打印到指定的文件中
        } else if (file.getName().endsWith(".java")) {
        // 得到路劲名,这步没用
        // String str = file.getAbsolutePath();
        // 你需要做得是把.java文件的内容读出来,再写入a.txt
        BufferedReader br = new BufferedReader(new FileReader(file));
        String data = "";
        while ((data = br.readLine()) != null) {
        // pw会自动flush
        pw.println(data);
        }
     br.close();
}


作者: smutear    时间: 2012-7-25 23:45
本帖最后由 smutear 于 2012-7-25 23:47 编辑
  1. import java.io.*;
  2. public class IoTest {
  3.         public static void main(String[] args) throws IOException
  4.         {
  5.                 PrintWriter pw = new PrintWriter(new FileWriter("f:\\a.txt"),true);
  6.                 File f = new File("f:");
  7.                toFile(f,pw);
  8.         }
  9.         public static void toFile(File dir, PrintWriter pw) throws IOException
  10.         {
  11.                 File[] files = dir.listFiles();
  12.                 //通过递归判断
  13.                 for (File file : files)
  14.                 {
  15.                         if (file.isDirectory())
  16.                         {
  17.                         toFile(file, pw);
  18.                         }
  19.                         //把指定目录下.java结尾的文件找出来,并打印到指定的文件中
  20.                         else if(file.getName().endsWith(".java"))
  21.                         {
  22.                                 //得到路劲名
  23.                                 String str = file.getAbsolutePath();
  24.                                 pw.println(str);
  25.                         }
  26.                 }
  27.                 pw.close();
  28.         }
  29. }


  30. 第七行。
复制代码

作者: smutear    时间: 2012-7-25 23:48
说错了,第六行。。。
作者: Friends★    时间: 2012-7-26 00:04
smutear 发表于 2012-7-25 23:48
说错了,第六行。。。

呵呵……第六行哪里错了?
作者: Friends★    时间: 2012-7-26 00:05
王志明 发表于 2012-7-25 23:43
if (file.isDirectory()) {
        toFile(file, pw);
        //把指定目录下.java结尾的文件找出来,并打印到指定的文 ...

我按照你说的做了,但是还是没有出来,可以在帮我看

看不?
作者: 王志明    时间: 2012-7-26 00:15
Friends★ 发表于 2012-7-26 00:05
我按照你说的做了,但是还是没有出来,可以在帮我看

看不?

还有第六行盘符后面要加斜杠
f:/或f:\\
作者: Friends★    时间: 2012-7-26 00:19
王志明 发表于 2012-7-26 00:15
还有第六行盘符后面要加斜杠
f:/或f:\\

一直都有斜杠啊!
作者: 王志明    时间: 2012-7-26 00:26
Friends★ 发表于 2012-7-26 00:19
一直都有斜杠啊!

f盘根下有.java文件吗
作者: 王志明    时间: 2012-7-26 00:34
Friends★ 发表于 2012-7-26 00:19
一直都有斜杠啊!

我把2楼代码更新了,我这边运行通过了,也达到了你要的效果,你试试
作者: 胡文凡    时间: 2012-7-27 10:17
我按照楼主的思路走了一遍。找到了问题所在
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;

public class demo {

        public static void main(String[] args) throws Exception{                //楼主的意思我明白,不是像二楼说的打印内容,只是输出目录
                PrintWriter pw = new PrintWriter(new FileWriter("d://a.txt"),true);                //可能的错误:原来的printWriter不能自动刷新
                File f = new File("d:"+File.separator);                                //原因找到。就是这里,少了个分隔符
                toFile(f,pw);
               
        }
        public static void toFile(File f,PrintWriter pw) throws Exception{       
                if(f.isDirectory()){                        //是目录,得到目录下文件列表
                        System.out.println("aa");
                        File[] fs = f.listFiles();
                        if(fs!=null){                                        //有必要进行判断,因为会读到系统不让访问的文件夹,出现空指针异常。
                                for(File f1: fs){
                                        System.out.println("bb");
                                        toFile(f1, pw);                                //对目录下文件递归查找
                                }
                        }
                }else{                                        //不是目录,就看是否是以java结尾
                        if(f.getName().endsWith(".java")){
                                System.out.println("cc");
                                String path= f.getAbsolutePath();               
                                pw.println(path);
                        }
                }
        }
}

结果.png (14.12 KB, 下载次数: 43)

结果.png

作者: smutear    时间: 2012-8-2 15:13
Friends★ 发表于 2012-7-26 00:04
呵呵……第六行哪里错了?

不要斜杠。
作者: 韩伟    时间: 2012-8-2 17:56
import java.io.*;
class IoTest
{
    public static void main(String[] args) throws IOException
    {
        PrintWriter pw = new PrintWriter(new FileWriter("f:\\a.txt"),true);
        File f = new File("f:\\");
        toFile(f, pw);
        pw.close();   //关闭放在这里就行
    }

     public static void toFile(File dir, PrintWriter pw) throws IOException
     {
        File[] files = dir.listFiles();
        if(files != null)        //如果你访问的文件夹是空文件夹,那么数组就是空的,接下来访问就回出现空指针异常                                               
        for (File file : files)
        {
           if (file.isDirectory())
            {
                toFile(file, pw);
                                                                  
           } else if (file.getName().endsWith(".java"))
           {                                                                           
              String str = file.getAbsolutePath();
              pw.println(str);
              pw.flush();   //这里要刷新一下
             }
        }
        // pw.close(); //这里不能关闭,因为你如果关闭了,在第一次循环之后就不能写了
    }
}
运行结果:






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2