这个题我研究了很久,但是问题出现在我不知道该怎么去记录这个数量.
我用了递归,因为可能一个文件夹下还有另外一个文件夹.但是如果我在方法里定义一个变量来当做计数器的话,那么递归调用时,每次调用都会把计数器的值给重新变成0.- package com.heima.test;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.FileReader;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.util.Scanner;
- public class Test1 {
- /*
- * 计算指定路径下所有.txt文件包括子文件夹里的.txt文件的个数然后将所有的.txt文件复制到D盘下任意目录
- */
- public static void main(String[] args) throws IOException {
- Scanner sc = new Scanner(System.in);
- System.out.println("请输入一个文件夹路径");
- String line = sc.nextLine();
- File file = new File(line); //将键盘录入的字符串封装成一个File
- //File newDir = new File("D:\\", file.getName()); //创建一个文件夹用于将拷贝
- copy(file);
- }
- /*
- * 获取数量并拷贝的方法
- * 1.返回值void
- * 2.参数列表为File file
- */
- public static void copy(File file) throws IOException {
- File[] subFiles = file.listFiles();
- for (File subFile : subFiles) {
- if (subFile.isFile() && subFile.getName().endsWith(".txt")) {
- /*FileInputStream fis = new FileInputStream(file);
- FileOutputStream fos = new FileOutputStream(new File("D:\\", file.getName())); //拷贝到D盘下
- byte[] arr = new byte[1024];
- int len;
-
- while((len = fis.read(arr)) != -1) {
- fos.write(arr, 0, len);
- }
- fis.close();
- fos.close();*/
- FileReader fr = new FileReader(subFile); //一般.txt格式都是纯文本文件,可以用字符流
- FileWriter fw = new FileWriter(new File("D:/",subFile.getName()));
- int b;
-
- while((b = fr.read()) != -1) {
- fw.write(b);
-
- }
- fr.close();
- fw.close();
-
- }else if(subFile.isDirectory()) {
- copy(subFile); //如果是一个文件夹就递归调用
- }
- }
- }
- }
复制代码
大家可以看看我的代码,试着帮我改一下.
|
|