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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 请叫我廖小帅 中级黑马   /  2016-12-4 16:03  /  1184 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

递归遍历 "D:\\KsTest" 文件夹,查找:文件夹名称包含 "毕业证" 且后缀名为.jpg的文件,
         * 将符合条件的文件名打印到控制台,并统计出总数
         * PS:可以手动创建测试类所需的文件夹和相关文件

5 个回复

倒序浏览
求帮忙解决递归题目!!!本人递归学的非常菜
回复 使用道具 举报
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());
                                        }
                                       
                                }
                        }
                }
        }

}
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
文明密码 发表于 2016-12-4 23:34
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

大兄弟 这是上次的题目 , 你仔细看一下题目
回复 使用道具 举报
回复 使用道具 举报
我现在也上课开学了,你根据这个改一下呗
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马