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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chenguoyu520 中级黑马   /  2015-11-11 14:20  /  3516 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1黑马币
计算指定路径下所有.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文件的个数。不要分开将统计子目录跟父目录中的次数。


最佳答案

查看完整内容

把static int count =0; 声明在函数外,类中,使之成为成员变量 然后在39行插入count++; 打印个数的 System.out.println("以.txt文件结尾的文件的个数是:"+count); 剪切出来放在18行下, 还有,你这个代码有问提,不满足题目要求

14 个回复

倒序浏览
把static int count =0;
声明在函数外,类中,使之成为成员变量
然后在39行插入count++;
打印个数的
System.out.println("以.txt文件结尾的文件的个数是:"+count);
剪切出来放在18行下,
还有,你这个代码有问提,不满足题目要求
回复 使用道具 举报
把 int count =0
声明在函数外,类中,使之成为成员变量
然后在39行插入count++;
回复 使用道具 举报
不是在40行加个统计么
回复 使用道具 举报
492649315 发表于 2015-11-12 09:43
不是在40行加个统计么

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

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

大神可否将该题做一下呢,我看一下,自己问题出在哪。。
回复 使用道具 举报
。。。。
回复 使用道具 举报

表示有难度,只能看你们做了,看大神做题也是一种享受。
回复 使用道具 举报
count生命成全局变量,.txt文件判断内加入count++;  43行打印语句放在调用listTxt方法的下一行~
亲测可用~


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

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

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

没问题的 优先记录父目录中的txt文件.再次调用方法时计数器不清零 会将子目录及父目录的统计到一起
回复 使用道具 举报
a2300538 发表于 2015-11-25 20:09
没问题的 优先记录父目录中的txt文件.再次调用方法时计数器不清零 会将子目录及父目录的统计到一起 ...

嗯,看前面大神指出这道题我做的有问题,不满足题目要求,请哥们给我改改,指出问题在哪
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马