1. package cn.itcast_05;
  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8. /*
  9. * 需求:复制多极文件夹
  10. *
  11. * 数据源:G:\Java\demos
  12. * 目的地:G:\\
  13. *
  14. * 分析:
  15. *      A:封装数据源File
  16. *      B:封装目的地File
  17. *      C:判断该File是文件还是文件夹
  18. *          a:是文件夹
  19. *              就在目的地目录下创建该文件夹
  20. *              获取该File对象下的所有文件或者文件夹File对象
  21. *              遍历得到每一个File对象
  22. *              回到C
  23. *          b:是文件
  24. *              就复制(字节流)
  25. */
  26. public class copyFolderDemo {
  27. public static void main(String[] args) throws IOException {
  28. // 封装数据源
  29. File srcFolder = new File("D:\\a\\demos");
  30. // 封装目的地
  31. File destFolder = new File("D:\\");
  32. // 复制文件夹功能
  33. copyFolder(srcFolder, destFolder);
  34. }
  35. /**
  36. * 复制文件夹方法
  37. *
  38. * @param srcFolder
  39. *            数据源
  40. * @param destFolder
  41. *            目的地
  42. */
  43. public static void copyFolder(File srcFolder, File destFolder)
  44. throws IOException {
  45. // 判断该File是文件还是文件夹
  46. if (srcFolder.isDirectory()) {
  47. // 文件夹
  48. File newFolder = new File(destFolder, srcFolder.getName());
  49. newFolder.mkdir();
  50. // 获取该File对象下的所有文件或者文件夹File对象
  51. File[] fileArray = srcFolder.listFiles();
  52. // 遍历得到每一个File对象
  53. for (File file : fileArray) {
  54. copyFolder(file, newFolder);
  55. }
  56. } else {
  57. // 文件
  58. File newFile = new File(destFolder, srcFolder.getName());// G:\d.txt
  59. // 复制文件功能
  60. copyFile(srcFolder, newFile);
  61. }
  62. }
  63. /**
  64. * 复制文件方法
  65. *
  66. * @param srcFolder
  67. *            数据源
  68. * @param newFile
  69. *            目的地
  70. */
  71. public static void copyFile(File srcFolder, File newFile)
  72. throws IOException {
  73. // 封装数据源
  74. BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
  75. srcFolder));
  76. // 封装目的地
  77. BufferedOutputStream bos = new BufferedOutputStream(
  78. new FileOutputStream(newFile));
  79. // 读写数据
  80. byte[] bys = new byte[1024];
  81. int len = 0;
  82. while ((len = bis.read(bys)) != -1) {
  83. bos.write(bys, 0, len);
  84. bos.flush();
  85. }
  86. // 释放资源
  87. bos.close();
  88. bis.close();
  89. }
  90. }

从控制台获取输入的文件目录然后将该目录(包含子目录)下的.java文件复制到D:/java文件夹中,并统计java文件的个数.

提示:如果有相同的名称的文件,如果两个Test01.java,则拷贝到目标文件夹时只能有一个Test01.java,另一个Test01.java要修改为另一个名称:该名称可随机生成,只要不重复即可.

package cn.itcast.demo;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;
import java.util.Scanner;

public class Test02 {
static int count = 0;

public static void main(String[] args) throws IOException {
// 获得源文件夹
File srcDir = inputFile();
// 创建目标文件夹对象
File destDir = new File("d:/java");
destDir.mkdirs();
// 拷贝Java文件
copyJavaFile(srcDir, destDir);
System.out.println("count = " + count);
}

/*
* 将srcDir文件夹下的所有.Java文件拷贝到destDir文件夹下
*/
public static void copyJavaFile(File srcDir, File destDir)
throws IOException {
// 获得源文件夹下所有的.java文件和子文件夹
File[] files = srcDir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
if (pathname.isDirectory()
|| pathname.getName().endsWith(".java"))
return true;
return false;
}
});
// 遍历文件数组
for (File file : files) {
// 判断file是否是文件夹
if (file.isDirectory()) {
// 递归调用当前方法
copyJavaFile(file, destDir);
} else { // 如果是文件,拷贝到目标文件夹destDir下
// 获得要拷贝的文件名
String fileName = file.getName();
// 在目标文件夹destDir下创建一个同名文件名
File destFile = new File(destDir, fileName);
// 判断目标文件是否存在
while (destFile.exists()) {
// 重命名目标文件名
destFile = new File(destDir, new Random().nextInt(100000)
+ fileName);
}
System.out.println(destFile);
copyFile(file, destFile);
}
}
}

/*
* 字节流缓冲区流读写字节数组
*/
private static void copyFile(File srcFile, File destFile)
throws IOException {
// 计数器加一
count++;
// 创建字节缓冲输入流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
srcFile));
// 创建字节缓冲输出流
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(destFile));

int len = 0;
byte[] buffer = new byte[1024];
// 循环读取数据
while ((len = bis.read(buffer)) != -1) {
// 利用输出流往输出目的写数据
bos.write(buffer, 0, len);
}

// 关闭资源
bis.close();
bos.close();
}

/*
* 根据用户输入的路径字符串创建文件对象
*/
private static File inputFile() {
// 创建键盘输入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个文件夹路径:");
// 接收用户输入的路径
String filePath = sc.nextLine();
// 根据路径字符串创建文件对象
File dir = new File(filePath);
if (!dir.exists())
throw new RuntimeException("你输入的文件路径不存在!!!");
// 判断是否是文件夹
if (!dir.isDirectory()) {
throw new RuntimeException("输入的路径不是文件夹路径!!!");
}
return dir;
}
}

IO复制多级目录 控制台输入文件目录然后把目录下java文件复制到 D: 并统计java个数的更多相关文章

  1. java基础 File 递归删除文件夹中所有文件文件夹 目录(包含子目录)下的.java文件复制到e:/abc文件夹中, 并统计java文件的个数

    File 递归删除文件夹中所有文件文件夹 package com.swift.kuozhan; import java.io.File; import java.util.Scanner; /*键盘录 ...

  2. Java算法面试题:编写一个程序,将e:\neck目录下的所有.java文件复制到e:\jpg目录下,并将原来文件的扩展名从.java改为.jpg

    package com.swift; import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; i ...

  3. Java基础面试操作题: File IO 文件过滤器FileFilter 练习 把一个文件夹下的.java文件复制到另一个文件夹下的.txt文件

    package com.swift; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File ...

  4. Python 文件复制&按目录树结构拷贝&批量删除目录及其子目录下的文件

    文件复制&按目录树结构拷贝&批量删除目录及其子目录下的文件 by:授客 QQ:1033553122 测试环境: Python版本:Python 3.3.2 Win7 64 代码实践 # ...

  5. C# 把一个文件夹下所有文件复制到另一个文件夹下 把一个文件夹下所有文件删除(转)

    C# 把一个文件夹下所有文件复制到另一个文件夹下   public static void CopyDirectory(string srcPath, string destPath) { try { ...

  6. assets下的文件复制到SD卡

    由于assets和res下的文件都只可以读不可以写,那么在程序初始化后,将后期需要使用并且需要修改的文件复制到SD卡.下面代码提供一个工具类,将assets下的任意资源复制到SD卡下. assets下 ...

  7. Java文件复制删除操作合集

    import java.io.*; public class FileOperate { public FileOperate() { } /** * 新建目录 * @param folderPath ...

  8. java文件复制函数

    在写代码中,经常会需要复制文件.这时候就可以把这些函数放到工具类里面. 下面是一个复制文件的函数: public class CopyFileUtil { private static String ...

  9. Java文件复制与读写

    函数介绍 public String readLine():每次读取文件的一行,当文件读取完毕时,返回null     public int read(byte[] b):将文件内容读取到字节数组b ...

随机推荐

  1. python入门(8)数据类型和变量

    python入门(8)数据类型和变量 数据类型 在Python中,能够直接处理的数据类型有以下几种: 整数 Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样 ...

  2. Java8新特性第2章(接口默认方法)

    在Java中一个接口一旦发布就已经被定型,除非我们能够一次性的更新所有该接口的实现,否者在接口的添加新方法将会破坏现有接口的实现.默认方法就是为了解决这一问题的,这样接口在发布之后依然能够继续演化. ...

  3. svn介绍和安装

      什么是SVN呢,作用是什么: SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS/CVS,它采取了分支管理系统,它的设计目标就是取代CVS.SVN就是用于多个人共同开 ...

  4. 蛋疼zipline安装

    比安装zipline更让人蛋疼的是,网上的教程没有一个是TM对的,真的是忍不住要吐血. 真的是一步一坑,一步一坑 安装环境: Windows7旗舰版,64位系统 python 版本3.5.3 我没有用 ...

  5. 南京邮电大学java第二次实验报告

    实 验 报 告 ( 2017 / 2018学年 第2学期) 课程名称 JAVA语言程序设计 实验名称 Java集成开发环境的安装与使用. Java变量.表达式与控制结构 实验时间 2018 年 4 月 ...

  6. Bank方案SQL

    用于演示的Bank方案对应的SQL: /* 1.branch 开展银行交易业务的场所 */ DROP TABLE IF EXISTS branch; CREATE TABLE branch -- 开展 ...

  7. Kotlin技术入门以及和Java对比.md

    一.Kotlin基础环境搭建 Android studio的版本大于3.0 直接支持Kotlin语法,直接创建即可; Android studio的版本小于3.0,步骤如下: 需要下载插件 插件搜索 ...

  8. 老刘 Yii2 源码学习笔记之 Component 类

    类图关系 属性与方法 class Component extends BaseObject { private $_events = []; private $_eventWildcards = [] ...

  9. 超级好用的前端开发测试Chrome插件-WEB前端助手(FeHelper)

    WEB前端助手(FeHelper)插件概述 WEB前端助手:FeHelper是一款chrome浏览器插件.包含一些前端实用的工具,如字符串编解码.代码美化.JSON格式化查看.二维码生成器.编码规范检 ...

  10. [LeetCode] Find Mode in Binary Search Tree 找二分搜索数的众数

    Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred ...