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) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.转换流概述 我们之前 ...
随机推荐
- 快速构建Windows 8风格应用3-打包发布应用
原文:快速构建Windows 8风格应用3-打包发布应用 本篇博文主要介绍如何打包应用程序,成功后如何部署应用程序,最后介绍如何发布应用程序到应用商店中. 如何打包Windows 8风格应用程序呢? ...
- C语言两个libxml2库使用的问题
最近使用libxml2想做点东西,翻看一些example后还是有些疑问,去segmentfault问了下,感谢@pingjiang的热心解答,问题解决,记录如下 (一)如下是一个XML文件,p为根结点 ...
- [译]Java 设计模式之组合
(文章翻译自Java Design Pattern: Composite) 组合模式相对来说是比较简单的,但是它在很多设计中被用到,比如SWT.Eclipse工作空间等等.它创建了一个可以通过唯一的方 ...
- leetcode[70] Simplify Path
题目的意思是简化一个unix系统的路径.例如: path = "/home/", => "/home"path = "/a/./b/../../ ...
- leetcode第39题--Combination Sum II
题目: Given a collection of candidate numbers (C) and a target number (T), find all unique combination ...
- leetcode第三题--Longest Substring Without Repeating Characters
Problem:Given a string, find the length of the longest substring without repeating characters. For e ...
- javascript 学习总结(九)面向对象编程
1.面向对象的工厂方法 function createPerson(name, age, job){ var o = new Object(); o.name = name; o.age = age; ...
- 邮箱自动完成(jquary效果)
邮箱自动完成的效果在网站上大多都看过,但是质量参差不齐,今天突然在网上看到一篇博客,感觉这个插件很好,就想来写一下分享给大家! 效果图如下! 完整demo代码如下: <!DOCTYPE html ...
- 让Xcode Lua 语法高亮
本人不太喜欢用code ide 还是喜欢XCODE的风格 1.让Xcode支援Lua语法高亮(Syntax Highlighting) 1. 下载https://github.com/breinhar ...
- 轨道sql谈话 dbms_monitor
经常会遇到一个会话存在sql性能问题,但找不到哪一个sql导致DB更高的性能问题,这是我们需要在此session通过监测dbms_monitor软件包来实现. 首先确定要监控的会话sid及serial ...