A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


         * 运用IO流知识在D盘下新建 "试题"文件夹,利用递归将D:\\Kstest文件夹下所有包含 "试题" 的 txt 文件复制到 "试题"文件夹中
         * ps:为方便测试,请同一在kstest文件夹中创建一些文件

题目看似很简单 , 做起来难倒了我!!!求大牛帮忙解决 给出注释和代码

6 个回复

倒序浏览
递归拷贝这些 本人学的非常菜!!不知道有什么办法能提升一下 。。。 求大牛出招
回复 使用道具 举报
等了一下午也没人看到!!!黑马大牛去哪了
回复 使用道具 举报
package TestDemo;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class Demo3 {
        public static void main(String[] args) throws Exception{//为了省事,主方法中也不处理异常,直接抛给JVM默认处理,实际开发中必须处理
                copy("D:\\Kstest" , "试题" , "txt" , "D:\\试题") ;
        }
        /**
         * 此方法用于把源文件目录中文件名包含关键字的 以及指定文件后缀的文件,拷贝到一个指定目录中
         * 采用边读边写的方式提高效率,避免内存不足的隐患
         * @param 参数一,表示源目标文件夹的路径,参数二,文件名包含的关键字,参数三,文件后缀名,参数四,目标路径
         * @exception IO中出现的异常方法中暂时不处理,交调用出处理
         *
         * */
        public static void copy(String url1 , String key1 , String key2 , String url2) throws Exception{
                File inFile = new File(url1) ;//构建源文件目录路径
                File outFile = new File(url2) ;//构建目标文件夹路径
                if(!outFile.exists()){//如果目标路径不存在
                        outFile.mkdirs() ;//则创建目标路径
                }
                if(inFile.isDirectory()){//如果源路径是目录
                        File[] f = inFile.listFiles() ;//找到目录中所包含的所有文件夹和文件
                        if(f != null){//如果找到的结果不为空
                                for(int x = 0 ; x < f.length ; x ++){//循环对找到的文件或者文件夹进行读写操作
                                        if(f[x].isFile()){//如果找到的文件是一个具体文件(不是文件夹)
                                                if(f[x].getName().matches("(.)*" + key1 + "(.)*\\." + key2)){//如果这个文件的格式为包含 “关键字.后缀名”(既key1.key格式)
                                                        InputStream in = new FileInputStream(f[x]) ;//建立输入流
                                                        File outDest = new File(url2 + File.separator + f[x].getName()) ;//构建目标文件路径,f[x].getName()保证写入的文件跟读取的同名
                                                        OutputStream out = new FileOutputStream(outDest) ;//建立输出流
                                                        int temp = 0 ;
                                                        byte[] date = new byte[1024] ;//每次读1024字节,如果有大文件拷贝可以改容量,加快速度
                                                        while((temp = in.read(date)) != -1){//读
                                                                out.write(date , 0 , temp) ;//写
                                                        }
                                                        in.close() ;//关闭输入流
                                                        out.close() ;//关闭输出流
                                                }
                                        }else{
                                                //如果找到的文件不是一个具体文件(不是具体文件,就是文件夹了),那么递归方式再次对这个新的路径执行上述读写,f[x].getPath()得到这个不是具体文件的文件夹的路径
                                                copy(f[x].getPath() , key1 ,key2 , url2) ;
                                                System.out.println(f[x].getPath());
                                        }
                                       
                                }
                        }
                }
        }

}
回复 使用道具 举报 1 0
同学,你看看能不能理解,觉得有帮助请采纳!
回复 使用道具 举报
文明密码 发表于 2016-11-21 00:13
同学,你看看能不能理解,觉得有帮助请采纳!

我采纳了
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
文明密码 发表于 2016-11-21 00:10
package TestDemo;

import java.io.File;

可以可以 已采纳~~!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马