黑马程序员技术交流社区

标题: 修改以下代码 [打印本页]

作者: chenguoyu520    时间: 2015-11-11 14:20
标题: 修改以下代码
计算指定路径下所有.txt文件包括子文件夹里的.txt文件的个数然后将所有的.txt文件复制到D盘下任意目录
  1. import java.io.BufferedInputStream;
  2. import java.io.BufferedOutputStream;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;
  6. import java.util.Scanner;

  7. public class Test1 {

  8.         public static void main(String[] args) throws Exception{
  9.                 Scanner sc = new Scanner(System.in);
  10.                 System.out.println("请输入一个路径:");
  11.                 String path = sc.next();
  12.                 sc.close();
  13.                
  14.                 File olddir = new File(path);
  15.                 File newdir = new File("d:\\txt");
  16.                 listTxt(olddir,newdir);
  17.                 renameTxt(newdir);
  18.                
  19.         }
  20.         //列出指定目录中所有文件的方法
  21.         public static void listTxt(File olddir,File newdir) throws Exception{
  22.                 int count = 0;//定义一个计数器,用于计数txt文件个数
  23.                 if(!olddir.exists()){
  24.                         System.out.println("目录不存在");
  25.                 }
  26.                 if(!newdir.exists() || !newdir.isDirectory()){
  27.                         newdir.mkdirs();
  28.                 }
  29.                 File f = new File(newdir.getPath()+"\\"+olddir.getName());
  30.                 f.mkdir();
  31.                 File[] files = olddir.listFiles();
  32.                 for(File file : files){
  33.                         if(file.isDirectory()){
  34.                                 listTxt(file,f);
  35.                                
  36.                         }else if(file.getName().endsWith(".txt")){
  37.                                 copyTxt(file,f);
  38.                                
  39.                         }
  40.                 }
  41.                 System.out.println("以.txt文件结尾的文件的个数是:"+count);
  42.         }
  43.         //复制指定目录中文件的方法
  44.         public static void copyTxt(File olddir,File newdir) throws Exception{
  45.                 //创建缓冲区读取流对象并与要复制的文件对象关联
  46.                 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(olddir));
  47.                 //创建缓冲区写入流对象并与要复制的到的文件对象关联
  48.                 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newdir.getPath()+"\\"+olddir.getName()));
  49.                 int by = 0;
  50.                 while((by=bis.read())!=-1){
  51.                         bos.write(by);
  52.                 }
  53.                 //关闭资源
  54.                 bis.close();
  55.                 bos.close();
  56.         }
  57.         //修改文件名的方法
  58.         public static void renameTxt(File dir){
  59.                 if(!dir.exists()){
  60.                         System.out.println("文件不存在");
  61.                 }
  62.                 File[] files = dir.listFiles();
  63.                 for(File file : files){
  64.                         if(file.isDirectory()){
  65.                                 renameTxt(file);
  66.                         }else if(file.getName().endsWith(".txt")){
  67.                                 File newfile = new File(file.getPath().replaceAll("\\.txt", ".java"));
  68.                                 file.renameTo(newfile);
  69.                         }
  70.                 }
  71.         }

  72. }
复制代码
请大神修改一下代码将记录.txt文件次数的count写到正确位置,能统计总共的.txt文件的个数。不要分开将统计子目录跟父目录中的次数。



作者: 海狮    时间: 2015-11-11 14:20
把static int count =0;
声明在函数外,类中,使之成为成员变量
然后在39行插入count++;
打印个数的
System.out.println("以.txt文件结尾的文件的个数是:"+count);
剪切出来放在18行下,
还有,你这个代码有问提,不满足题目要求
作者: 海狮    时间: 2015-11-11 16:32
把 int count =0
声明在函数外,类中,使之成为成员变量
然后在39行插入count++;
作者: 492649315    时间: 2015-11-12 09:43
不是在40行加个统计么
作者: chenguoyu520    时间: 2015-11-12 09:46
492649315 发表于 2015-11-12 09:43
不是在40行加个统计么

那儿加,会分别列出子目录跟父目录中的个数,不会将全部的个数一次列出。
作者: chenguoyu520    时间: 2015-11-12 09:47
海狮 发表于 2015-11-11 16:32
把 int count =0
声明在函数外,类中,使之成为成员变量
然后在39行插入count++; ...

还是不可以,这样做,统计出的个数是不对的。
作者: chenguoyu520    时间: 2015-11-12 14:13
海狮 发表于 2015-11-12 10:23
把static int count =0;
声明在函数外,类中,使之成为成员变量
然后在39行插入count++;

大神可否将该题做一下呢,我看一下,自己问题出在哪。。
作者: Mr.Ar.Rn    时间: 2015-11-12 23:16
。。。。
作者: Juice.cy.wang    时间: 2015-11-12 23:37
Mr.Ar.Rn 发表于 2015-11-12 23:16
。。。。

表示有难度,只能看你们做了,看大神做题也是一种享受。
作者: a2300538    时间: 2015-11-21 20:14
count生命成全局变量,.txt文件判断内加入count++;  43行打印语句放在调用listTxt方法的下一行~
亲测可用~



作者: a2300538    时间: 2015-11-21 20:17
还有~亲,你的第69行 replaceAll的第二参数应该是.txt吧...
作者: chenguoyu520    时间: 2015-11-25 12:55
a2300538 发表于 2015-11-21 20:14
count生命成全局变量,.txt文件判断内加入count++;  43行打印语句放在调用listTxt方法的下一行~
亲测可用~

怎么感觉还是有问题呢,这样只是把父目录中的文件个数算出来了,可是不能把子目录跟父目录中全部统计出来啊
作者: chenguoyu520    时间: 2015-11-25 13:11
a2300538 发表于 2015-11-21 20:17
还有~亲,你的第69行 replaceAll的第二参数应该是.txt吧...

那个是改文件名的方法,就是将已.txt结尾的文件改为.java文件的,其实这个方法可以不用。
作者: a2300538    时间: 2015-11-25 20:09
chenguoyu520 发表于 2015-11-25 12:55
怎么感觉还是有问题呢,这样只是把父目录中的文件个数算出来了,可是不能把子目录跟父目录中全部统计出来 ...

没问题的 优先记录父目录中的txt文件.再次调用方法时计数器不清零 会将子目录及父目录的统计到一起
作者: chenguoyu520    时间: 2015-11-26 11:00
a2300538 发表于 2015-11-25 20:09
没问题的 优先记录父目录中的txt文件.再次调用方法时计数器不清零 会将子目录及父目录的统计到一起 ...

嗯,看前面大神指出这道题我做的有问题,不满足题目要求,请哥们给我改改,指出问题在哪




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