/**
* 编写一个程序,把指定目录下的所有的带.java文件都拷贝到另一个目录中,拷贝成功后,把后缀名是.java的改成.txt。
*/

1.我们看到这个题还是用大化小的思想来做
分析:1.拷贝 >>> 选择什么流呢??>>>拷贝我在上篇博客中写到,我们用字节流,字符流只读只写
2.java结尾 >> 我们可以想到String中的endsWith()方法.
3.拷贝成功后再改后缀名>>File中有一个后缀名的方法renameTo()的方法
4.如果就收拷贝的文件的文件夹中有相同的名字的文件怎么办呢?? 想想这个

我们看代码:第一步:1.拷贝 >>> 选择什么流呢??>>>拷贝我在上篇博客中写到,我们用字节流,字符流只读只写
         2.java结尾 >> 我们可以想到String中的endsWith()方法.

/*
*文件的拷贝
*/
private static void copy(File src, File dest) throws IOException {
File[] files = src.listFiles();
//判断数组是否为空
if (files != null) {
//遍历数组
for (File file : files) {
//是文件并且以java结尾的文件
if (file.isFile() && file.getName().endsWith(".java")) {
//缓冲流拷贝 速度快
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(new File(dest, file.getName()))); byte[] by = new byte[1024];
int len = 0;
while ((len = bis.read(by)) != -1) {
bos.write(by, 0, len);
}
//关流
bos.close();
bis.close();
//如果是文件
} else if (file.isDirectory()) {
//在判断这个文件夹是不是空的或者没有java文件 那样我们就不要复制了 定义remove()
if (remove(file)) {
File newfile = new File(dest, file.getName());
newfile.mkdirs();
copy(file, newfile);
}
}
}
} } private static boolean remove(File file) {
File[] files = file.listFiles();
//判断数组是否为空
if (file != null) {
for (File file2 : files) {
//是文件并且以java结尾的文件 返回真
if (file2.isFile() && file2.getName().endsWith(".java")) {
return true;
//这里是关键 不经要是文件 而且还要满足文件中要包含java文件
} else if (file2.isDirectory() && remove(file2)) {
return true;
}
}
}
//条件不符合返回false
return false;
}
}

第二步:3.拷贝成功后再改后缀名>>File中有一个后缀名的方法renameTo()的方法 
    4.如果就收拷贝的文件的文件夹中有相同的名字的文件怎么办呢?? 想想这个

    //.java修改成.txt
private static void revamp(File dest) throws IOException{
File[] file = dest.listFiles();
for (File file2 : file) {
if(file2.isFile()){
//获取文件名称字符串
String sb = file2.getName();
//判断是否是Java文件
if(sb.endsWith(".java")){
StringBuilder sb1 = new StringBuilder(sb);
//替换 把java字符串 替换成.txt字符串
sb1.replace(sb1.toString().indexOf(".java"), sb1.length(), ".txt");
//新建文件
File newfile = new File(dest, sb1.toString()); //再来一次循环 循环本次数组中的文件和文件夹
for (File file3 : file) {
//如果里面有相同的文件的就删除在 重命名
if(file3.isFile() && newfile.getName().equals(file3.getName())){
file3.delete();
}
}
//判断文件夹中是否存在重名
file2.renameTo(newfile);
}
//如果是文件 就递归
} else if (file2.isDirectory()) {
revamp(file2);
}
}
}

main方法

public static void main(String[] args) throws IOException {
//封装文件地址
File src = new File("E:\\IO流");
File dest = new File("E:\\IO");
//拷贝
copy(src, dest);
//重命名
revamp(dest);
}

Java基础IO文件拷贝练习题的更多相关文章

  1. Java基础-IO流对象之随机访问文件(RandomAccessFile)

    Java基础-IO流对象之随机访问文件(RandomAccessFile) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.RandomAccessFile简介 此类的实例支持对 ...

  2. Java基础IO流(二)字节流小案例

    JAVA基础IO流(一)https://www.cnblogs.com/deepSleeping/p/9693601.html ①读取指定文件内容,按照16进制输出到控制台 其中,Integer.to ...

  3. Java基础-IO流对象之打印流(PrintStream与PrintWriter)

    Java基础-IO流对象之打印流(PrintStream与PrintWriter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.打印流的特性 打印对象有两个,即字节打印流(P ...

  4. Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream)

    Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.对象的序 ...

  5. Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream)

    Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在我们学习字 ...

  6. Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream)

    Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前我已经分享过很多的J ...

  7. java基础-IO流对象之Properties集合

    java基础-IO流对象之Properties集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Properties集合的特点 Properties类表示了一个持久的属性集. ...

  8. Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader)

    Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.字符缓冲流 字符缓冲流根据流的 ...

  9. Java基础-IO流对象之转换流(InputStreamReader与OutoutStreamWriter)

    Java基础-IO流对象之转换流(InputStreamReader与OutoutStreamWriter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.转换流概述 我们之前 ...

随机推荐

  1. PHP 9: 表达式

    原文:PHP 9: 表达式 本章介绍PHP的表达式.PHP的表达式其实和其他语言没有什么区别.普通的赋值是表达式,函数也是表达式,通过函数赋值也是.三元条件运算符也是,即: $first ? $sec ...

  2. PHP系列目录

    原文:PHP系列目录 PHP系列的对象是已经熟悉了一门或多门语言的开发人员.如果你是其中一份子,而且你也打算学习PHP,相信你根据本系列会很快掌握PHP的.欢迎大家给出意见或建议.同时也欢迎大家的批评 ...

  3. Nancy学习

    Nancy学习 一.认识Nancy 今天听讲关于Nancy框架的培训,被Nancy的易用性所吸引.故晚上回来梳理了一下知识. 什么是Nancy呢?如标题所述,Nancy是一个轻量级的独立的框架: Na ...

  4. 分享UI设计模型

    UI设计模型是可重用的界面设计解决方案,可以让开发人员少走弯路,节约不少开发时间.下面慧都小编跟大家分享6个很有用的UI设计模型资源,希望对你有用: 1.UI Patterns 由一个丹麦人开发的UI ...

  5. /bin/bash^M: bad interpreter: No such file or directory

    <今天遇到的问题,  网上有非常多类似的文章,  个人记录下来,  加深记忆,  已经明确的就绕路吧.> 运行一个脚本full_build.sh 时, 一直是提示我: -bash: ./f ...

  6. SQL Server 数据库定时自动备份

    原文:SQL Server 数据库定时自动备份 SQL Server 数据库定时自动备份——每天定时备份,保留前8天的备份 利用SQL Server代理新建作业来定期备份 1)在数据库库的[SQL S ...

  7. 【转】 Android项目的mvc模式

    MVC (Model-View-Controller):M是指逻辑模型,V是指视图模型,C则是控制器.一个逻辑模型M可以对于多种视图模型V,比如一批统计数据你可以分别用柱状图.饼图V来表示.一种视图模 ...

  8. IQueryable与IQEnumberable的区别

    IEnumberable接口: 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代.也就是说:实现了此接口的object,就可以直接使用froeach遍历此object; IQueryable接口 ...

  9. c#自带压缩类实现数据库表导出到CSV压缩文件

    c#自带压缩类实现数据库表导出到CSV压缩文件的方法 在导出大量CSV数据的时候,常常体积较大,采用C#自带的压缩类,可以方便的实现该功能,并且压缩比例很高,该方法在我的开源工具DataPie中已经经 ...

  10. zxing二维码扫描的流程简析(Android版)

    目前市面上二维码的扫描似乎用开源google的zxing比较多,接下去以2.2版本做一个简析吧,勿喷... 下载下来后定位两个文件夹,core和android,core是一些核心的库,android是 ...