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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lt3886930 中级黑马   /  2016-6-22 22:53  /  668 人查看  /  9 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

题目: IO流 概率 高
/*        统计一个文件夹下的txt文件个数,包括所有子文件夹内,
        并将它们全部复制到D盘任意目录下
思路:
        (★提示★)用高效字节流可以用来复制任意类型文件
        1、定义一个统计变量
        2、用File对象封装目录
        3、通过listFiles()方法获取该目录下所有的文件或者文件夹的File对象数组
        4、遍历这个File数组,得到每一个File对象
        5、判断该File对象是否是文件夹
                a、如果是文件夹回到第3步
                b、继续判断是否以.txt结尾
                        是:复制文件并将统计文件变量加1
                        否:不复制
*/
//导包
import java.io.IOException;
import java.io.File;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
class FileCopyMultiFolderByByte
{
        //用来统计复制文件的总个数
        public static int count =0;
        public static void main(String[] args) throws IOException
        {       
                //用File对象封装目录
                File srcfile = new File("D:\\demos\\");
                //用File对象封装目录
                File destFile = new File("D:\\copyTo\\");
                //调用复制的方法
                copyFolder(srcfile,destFile);
                System.out.println("文件复制完毕,共复制文件 "+count+" 个");
        }
        //复制方法
        public static void copyFolder(File srcFile, File destFile) throws IOException
        {
                //通过listFiles()方法获取该目录下所有的文件或者文件夹的File对象数组
                File[] fileArray = srcFile.listFiles();
                //遍历这个File数组,得到每一个File对象
                for(File file : fileArray)
                {
                        //判断该File对象是否是文件夹
                        if(file.isDirectory())
                        {
                                //多级目录递归
                                copyFolder(file,destFile);
                        }
                        else
                        {
                                //文件
                                File newFile = new File(destFile, file.getName());
                                copyFile(file , newFile);
                        }
                }
        }
        //复制文件并计数的方法
        public static void copyFile(File srcFile, File newFile) throws IOException
        {
                //如果不是以txt为后缀的不复制,跳出循环
                if(!srcFile.getName().endsWith(".txt"))
                {
                        continue;
                }
                //统计文件个数的变量加1
                count++;
                //用高效的字节输入流封装数据源
                BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
                //用高效的字节输出流封装目的地
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile));
                byte[] bys= new byte[1024];
                int len = 0;
                //判断是否读到文件结尾
                while( (len = bis.read(bys)) != -1 )
                {
                        //将数据写到文件中
                        bos.write(bys,0,len);
                        //刷新缓存流
                        bos.flush();
                }
                //关闭流对象
                bis.close();
                bos.close();
        }
}

9 个回复

倒序浏览
不觉而厉
回复 使用道具 举报

一起努力,一起加油,我们是最棒的
回复 使用道具 举报
w1599928008 来自手机 中级黑马 2016-6-23 23:52:56
板凳
谢谢楼主分享,收藏了
回复 使用道具 举报
lt3886930 发表于 2016-6-23 23:38
一起努力,一起加油,我们是最棒的

一起努力 哈哈哈
回复 使用道具 举报
谢谢楼主分享,收藏了
回复 使用道具 举报
我就是进来看看!!!
回复 使用道具 举报
sgnx 中级黑马 2016-6-25 21:56:08
8#
这个必须赞一个
回复 使用道具 举报
努力,谢谢分享
回复 使用道具 举报
感谢楼主,马上考试了,过来看看
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马