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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

这个题我研究了很久,但是问题出现在我不知道该怎么去记录这个数量.
我用了递归,因为可能一个文件夹下还有另外一个文件夹.但是如果我在方法里定义一个变量来当做计数器的话,那么递归调用时,每次调用都会把计数器的值给重新变成0.
  1. package com.heima.test;

  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;
  6. import java.io.FileReader;
  7. import java.io.FileWriter;
  8. import java.io.IOException;
  9. import java.util.Scanner;

  10. public class Test1 {
  11.         /*
  12.          * 计算指定路径下所有.txt文件包括子文件夹里的.txt文件的个数然后将所有的.txt文件复制到D盘下任意目录
  13.          */
  14.         public static void main(String[] args) throws IOException {
  15.                 Scanner sc = new Scanner(System.in);
  16.                 System.out.println("请输入一个文件夹路径");
  17.                 String line = sc.nextLine();
  18.                 File file = new File(line);                                                                                                                                        //将键盘录入的字符串封装成一个File
  19.                 //File newDir = new File("D:\\", file.getName());                                                                                //创建一个文件夹用于将拷贝
  20.                 copy(file);
  21.         }
  22.         /*
  23.          * 获取数量并拷贝的方法
  24.          * 1.返回值void
  25.          * 2.参数列表为File file
  26.          */
  27.         public static void copy(File file) throws IOException {
  28.                 File[] subFiles = file.listFiles();
  29.                 for (File subFile : subFiles) {
  30.                         if (subFile.isFile() && subFile.getName().endsWith(".txt")) {
  31.                                 /*FileInputStream fis = new FileInputStream(file);
  32.                                 FileOutputStream fos = new FileOutputStream(new File("D:\\", file.getName()));                //拷贝到D盘下
  33.                                 byte[] arr = new byte[1024];
  34.                                 int len;
  35.                                
  36.                                 while((len = fis.read(arr)) != -1) {
  37.                                         fos.write(arr, 0, len);
  38.                                 }
  39.                                 fis.close();
  40.                                 fos.close();*/
  41.                                 FileReader fr = new FileReader(subFile);                                                                                        //一般.txt格式都是纯文本文件,可以用字符流
  42.                                 FileWriter fw = new FileWriter(new File("D:/",subFile.getName()));
  43.                                 int b;
  44.                                
  45.                                 while((b = fr.read()) != -1) {
  46.                                         fw.write(b);
  47.        
  48.                                 }
  49.                                 fr.close();
  50.                                 fw.close();
  51.                                
  52.                         }else if(subFile.isDirectory()) {
  53.                                 copy(subFile);                                                                                //如果是一个文件夹就递归调用
  54.                         }
  55.                 }
  56.         }

  57. }
复制代码

大家可以看看我的代码,试着帮我改一下.

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马