IO复制多级目录 控制台输入文件目录然后把目录下java文件复制到 D: 并统计java个数
- package cn.itcast_05;
- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- /*
- * 需求:复制多极文件夹
- *
- * 数据源:G:\Java\demos
- * 目的地:G:\\
- *
- * 分析:
- * A:封装数据源File
- * B:封装目的地File
- * C:判断该File是文件还是文件夹
- * a:是文件夹
- * 就在目的地目录下创建该文件夹
- * 获取该File对象下的所有文件或者文件夹File对象
- * 遍历得到每一个File对象
- * 回到C
- * b:是文件
- * 就复制(字节流)
- */
- public class copyFolderDemo {
- public static void main(String[] args) throws IOException {
- // 封装数据源
- File srcFolder = new File("D:\\a\\demos");
- // 封装目的地
- File destFolder = new File("D:\\");
- // 复制文件夹功能
- copyFolder(srcFolder, destFolder);
- }
- /**
- * 复制文件夹方法
- *
- * @param srcFolder
- * 数据源
- * @param destFolder
- * 目的地
- */
- public static void copyFolder(File srcFolder, File destFolder)
- throws IOException {
- // 判断该File是文件还是文件夹
- if (srcFolder.isDirectory()) {
- // 文件夹
- File newFolder = new File(destFolder, srcFolder.getName());
- newFolder.mkdir();
- // 获取该File对象下的所有文件或者文件夹File对象
- File[] fileArray = srcFolder.listFiles();
- // 遍历得到每一个File对象
- for (File file : fileArray) {
- copyFolder(file, newFolder);
- }
- } else {
- // 文件
- File newFile = new File(destFolder, srcFolder.getName());// G:\d.txt
- // 复制文件功能
- copyFile(srcFolder, newFile);
- }
- }
- /**
- * 复制文件方法
- *
- * @param srcFolder
- * 数据源
- * @param newFile
- * 目的地
- */
- public static void copyFile(File srcFolder, File newFile)
- throws IOException {
- // 封装数据源
- BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
- srcFolder));
- // 封装目的地
- BufferedOutputStream bos = new BufferedOutputStream(
- new FileOutputStream(newFile));
- // 读写数据
- byte[] bys = new byte[1024];
- int len = 0;
- while ((len = bis.read(bys)) != -1) {
- bos.write(bys, 0, len);
- bos.flush();
- }
- // 释放资源
- bos.close();
- bis.close();
- }
- }
从控制台获取输入的文件目录然后将该目录(包含子目录)下的.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个数的更多相关文章
- java基础 File 递归删除文件夹中所有文件文件夹 目录(包含子目录)下的.java文件复制到e:/abc文件夹中, 并统计java文件的个数
File 递归删除文件夹中所有文件文件夹 package com.swift.kuozhan; import java.io.File; import java.util.Scanner; /*键盘录 ...
- Java算法面试题:编写一个程序,将e:\neck目录下的所有.java文件复制到e:\jpg目录下,并将原来文件的扩展名从.java改为.jpg
package com.swift; import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; i ...
- Java基础面试操作题: File IO 文件过滤器FileFilter 练习 把一个文件夹下的.java文件复制到另一个文件夹下的.txt文件
package com.swift; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File ...
- Python 文件复制&按目录树结构拷贝&批量删除目录及其子目录下的文件
文件复制&按目录树结构拷贝&批量删除目录及其子目录下的文件 by:授客 QQ:1033553122 测试环境: Python版本:Python 3.3.2 Win7 64 代码实践 # ...
- C# 把一个文件夹下所有文件复制到另一个文件夹下 把一个文件夹下所有文件删除(转)
C# 把一个文件夹下所有文件复制到另一个文件夹下 public static void CopyDirectory(string srcPath, string destPath) { try { ...
- assets下的文件复制到SD卡
由于assets和res下的文件都只可以读不可以写,那么在程序初始化后,将后期需要使用并且需要修改的文件复制到SD卡.下面代码提供一个工具类,将assets下的任意资源复制到SD卡下. assets下 ...
- Java文件复制删除操作合集
import java.io.*; public class FileOperate { public FileOperate() { } /** * 新建目录 * @param folderPath ...
- java文件复制函数
在写代码中,经常会需要复制文件.这时候就可以把这些函数放到工具类里面. 下面是一个复制文件的函数: public class CopyFileUtil { private static String ...
- Java文件复制与读写
函数介绍 public String readLine():每次读取文件的一行,当文件读取完毕时,返回null public int read(byte[] b):将文件内容读取到字节数组b ...
随机推荐
- apigw鉴权分析(1-4)新浪微博开放平台 - 鉴权分析
一.访问入口 http://open.weibo.com/wiki/%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E 微博开放接口的调用,如 ...
- gradle入门(1-1)gradle的概念和使用
一.Gradle是什么 Gradle是一种Java应用构建工具,它采用领域特定语言 Groovy 语法实现配置. 1.Gradle的基本概念 项目:项目的配置 即 build.gradle. 任务:任 ...
- Spark-1.X编译构建及配置安装
前提条件(环境要求) jdk版本:1.7+ scala版本:1.10.4+ maven版本:3.3.3+ 本博客中使用的软件版本 spark版本:spark-1.6.1.tar.gz(源码) jdk版 ...
- python/*args和**kwargs
*args和**kwargs #coding=utf8 __author__ = 'Administrator' # 当函数的参数不确定时,可以使用*args和**kwargs.*args没有key值 ...
- win10 apache配置虚拟主机后localhost无法使用
win10系统配置虚拟主机1.用记事本或Sublime Text打开httpd.confctrl + f 搜索httpd-vhosts.conf 将#Include conf/extra/httpd- ...
- super函数的作用
super函数的作用super().__init__()当子类重写父类的方法时,会覆盖父类方法,super此举是保留父类 如果属性名跟方法名相同,属性会覆盖方法 方法必须要有实例才能被调用,这叫做绑定
- 树莓派(1)- Raspberry Pi 3B 安装系统并联网
一.背景 昨天到手淘宝买的3B,既然买了就不能让它吃灰,动起来. 二.物料 名称 说明 硬件 树莓派3B 主体 树莓派电源 5V 2A sd卡 4G低速(推荐是16G class10),我手头只有这 ...
- R语言-ggplot初级
ggplot2简介: 在2005年开始出现,吸取了基础绘图系统和lattice绘图系统的优点,并利用一个强大的模型来对其进行改进,这一模型基于之前所述的一系列准则, 能够创建任意类型的统计图形 1.导 ...
- .Net Core 学习之路-AutoFac的使用
本文不介绍IoC和DI的概念,如果你对Ioc之前没有了解的话,建议先去搜索一下相关的资料 这篇文章将简单介绍一下AutoFac的基本使用以及在asp .net core中的应用 Autofac介绍 组 ...
- [LeetCode] Accounts Merge 账户合并
Given a list accounts, each element accounts[i] is a list of strings, where the first element accoun ...