Java基础IO文件拷贝练习题
/**
* 编写一个程序,把指定目录下的所有的带.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文件拷贝练习题的更多相关文章
- Java基础-IO流对象之随机访问文件(RandomAccessFile)
Java基础-IO流对象之随机访问文件(RandomAccessFile) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.RandomAccessFile简介 此类的实例支持对 ...
- Java基础IO流(二)字节流小案例
JAVA基础IO流(一)https://www.cnblogs.com/deepSleeping/p/9693601.html ①读取指定文件内容,按照16进制输出到控制台 其中,Integer.to ...
- Java基础-IO流对象之打印流(PrintStream与PrintWriter)
Java基础-IO流对象之打印流(PrintStream与PrintWriter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.打印流的特性 打印对象有两个,即字节打印流(P ...
- Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream)
Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.对象的序 ...
- Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream)
Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在我们学习字 ...
- Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream)
Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前我已经分享过很多的J ...
- java基础-IO流对象之Properties集合
java基础-IO流对象之Properties集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Properties集合的特点 Properties类表示了一个持久的属性集. ...
- Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader)
Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.字符缓冲流 字符缓冲流根据流的 ...
- Java基础-IO流对象之转换流(InputStreamReader与OutoutStreamWriter)
Java基础-IO流对象之转换流(InputStreamReader与OutoutStreamWriter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.转换流概述 我们之前 ...
随机推荐
- jQuery数字加减插件
jQuery数字加减插件 我们在网上购物提交订单时,在网页上一般会有一个选择数量的控件,要求买家选择购买商品的件数,开发者会把该控件做成可以通过点击实现加减等微调操作,当然也可以直接输入数字件数.本文 ...
- ios 8 地图定位
在xcode6在 苹果公司定位方法改变地图,谁也无法使用 错误说明:Trying to start MapKit location updates without prompting for loca ...
- 使用c#给outlook添加任务、发送邮件
原文:使用c#给outlook添加任务.发送邮件 c#在使用outlook提供的一些API时,需要将outlook相关的com引用到项目中. 具体方法就是用vs打开工程后,在工程上添加引用,在com选 ...
- 让apache2不开机启动,管理Ubuntu的开机启动项
今天在网上发现了一个很好用的管理Ubuntu下开关启动的软件,叫做sysv-rc-conf 使用命令行: tf@ubuntu:/etc/apache2$ sudo update-rc.d -f apa ...
- 如何去除configure的默认选择-g O2
http://lists.gnu.org/archive/html/autoconf/2006-04/msg00002.html http://www.linuxidc.com/Linux/2013- ...
- 多数据库下activiti的流程定义缓存问题
我们使用activiti(5.14版本号)作为流程引擎,今天在产品中发现一个问题,某流程的审批记录中, 活动实例表中记录的活动名称(ACT_HI_ACTINST表的ACT_NAME)居然是该流程中不存 ...
- 【DateTime格式大全
】
DateTime dt = DateTime.Now;// Label1.Text = dt.ToString();//2005-11-5 13:21:25// Label2.Text = ...
- jQuery MiniUI
今天找到一个关于jQuery的又一个不错的UI,特此保存下.备用. http://www.miniui.com/
- mysql支持的数据类型及其测试
原文:mysql支持的数据类型及其测试 1.基础知识 1.1如何来查看mysql的帮助手册 ?int Help float; 1.2创建表的规则 CREATE TABLE [IF NOT EXISTS ...
- Xamarin Mono 环境搭建
Xamarin Mono 环境搭建(使用Visual Studio 2013 开发android 和 ios ) 本文主要介绍Xamarin结合VS2013来开发Android应用程序,主要会介绍Mo ...