package com.swift.test; import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Scanner; /*从控制台获取输入的文件目录然后将该目录(包含子目录)下的.java文件复制到e:/abc文件夹中, 并统计java文件的个数. 提示:如果有相同的名称的文件,如果两个Test01.java,则拷贝到目标文件夹时只能有一个Test01.java, 另一个Test01.java要修改为另一个名称:该名称可随机生成,只要不重复即可.*/ public class toOneFile { private static int sum = 0; public static void main(String[] args) throws IOException { String path = "D:\\java完整代码"; File src = new File(path); File dest = new File("D:\\bbbb"); if (!dest.exists()) { dest.mkdirs(); } copy(src, dest); System.out.println(".java文件的个数是" + sum); } private static void copy(File src, File dest) throws IOException { File[] files = src.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { if (pathname.isDirectory()) { try { copy(pathname, dest); } catch (IOException e) { e.printStackTrace(); } } if (pathname.getName().toLowerCase().endsWith(".java")) { return true; } return false; } }); for (File file : files) { String name = file.getName(); File destFile = new File(dest, name); copyFile(file, destFile); System.out.println(file); } sum = sum + files.length; } public static void copyFile(File file1, File file2) throws IOException { FileInputStream fis = new FileInputStream(file1); // 2.创建字节输出流对象关联文件路径:D盘下的a.png FileOutputStream fos = new FileOutputStream(file2); // 3.定义一个字节数组,用来存放读取到文件字节数 byte[] buf = new byte[128]; int len; // 4.使用循环不断从字节输入流读取一个字节数组,每读取一个字节数组就利用输出流写出一个字节数组。 while ((len = fis.read(buf)) != -1) { fos.write(buf, 0, len); } System.out.println("已经copy成功"); // 5.关闭流,释放资源 fis.close(); fos.close(); } }