/**
* 编写一个程序,把指定目录下的所有的带.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); }