IO_字节流_拷贝

文件的拷贝

——以程序为桥梁(文件的写入写出的综合应用)

2、操作

1)建立联系    File对象   源头—目的地

2)选择流   

                文件输入流 InputStream FileInputStream

                文件输出流 OutputStream FileOutputStream

3)操作    拷贝—不断的读取、不断的写出

                数组大小+read / write   

                byte[ ] source= new byte[1024] 

                int len = 0 ;

                while(-1!=(len=输入流.read( source))){

                         输出流.write( source,0,len )

                }

                输出流.flush

4)  释放资源  关闭   两个流

/**
 * 操作
 * 1)建立联系    File对象   源头—目的地
 * 2)选择流
 * 文件输入流 InputStream FileInputStream
 * 文件输出流 OutputStream FileOutputStream
 * 3)操作    拷贝—不断的读取、不断的写出
 * 数组大小+read / write
 * byte[ ] source= new byte[1024]
 * int len = 0 ;
 * while(-1!=(len=输入流.read( source))){
 * 输出流.write( source,0,len )
 * }
 * 输出流.flush
 * 4)  释放资源  关闭   两个流
 *
 * @author 
 * @date 2018/5/27 22:39
 */
public class CopyFile {
    public static void main(String[] args) {
        String srcPath = "F:/test/1.txt";
        String desPath = "F:/test/p/100.txt";
        try {
            copyFILE(srcPath,desPath);
        } catch (IOException e) {
            System.out.println("文件不存在,拷贝文件失败");
            e.printStackTrace();
        }
    }
    
    /**
     *  提取为方法
     * @param srcPath 源路径
     * @param desPath 目标路径
     * @throws IOException
     */
    public static void copyFILE(String srcPath,String desPath) throws IOException {
        //1、建立联系 源(文件存在)—目的地(文件可以不存在(视文件而定))
        File source = new File(srcPath);
        File destination = new File(desPath);

        if (!source.isFile()){//不是文件或者为null
            System.out.println("只能拷贝文件");
            throw new IOException("只能拷贝文件");
        }

        //2、选择流
        InputStream is = new FileInputStream(source);
        OutputStream os = new FileOutputStream(destination);
        //3、文件拷贝——循环读取和写出文件
        byte[] flu = new byte[1024];//缓存数组
        int len = 0;//定义的接收长度
        //读取
        while (-1!=(len = (is.read(flu)))){
            //写出
            os.write(flu,0,len);
        }
        os.flush();//强制刷出
        //关闭流——规则:先打开的后关闭
        os.close();
        is.close();
    }
}


public class CopyFileUtil {
    public static void copyFILE(String srcPath,String desPath) throws IOException {
        //1、建立联系 源(文件存在)—目的地(文件可以不存在(视文件而定))
        copyFILE(new File(srcPath),new File(desPath));
    }
    /**
     *  文件的拷贝
     * @param src 源文件File对象
     * @param des 目标文件FIle对象
     */
    public static void copyFILE(File src,File des) throws IOException {
        if (!src.isFile()){//不是文件或者为null
            System.out.println("只能拷贝文件");
            throw new IOException("只能拷贝文件");
        }

        //2、选择流
        InputStream is = new FileInputStream(src);
        OutputStream os = new FileOutputStream(des);
        //3、文件拷贝——循环读取和写出文件
        byte[] flu = new byte[1024];//缓存数组
        int len = 0;//定义的接收长度
        //读取
        while (-1!=(len = (is.read(flu)))){
            //写出
            os.write(flu,0,len);
        }
        os.flush();//强制刷出

        //关闭流——规则:先打开的后关闭
        os.close();
        is.close();
    }
}


文件夹的拷贝

1、递归查找子孙级文件、文件夹

2、文件  直接复制(IO流复制)

     文件夹  创建

/**
 * 文件夹的拷贝
 * 1、如果是文件则直接复制 copyFiles
 * 2、如果是文件夹则创建 mkdirs( )
 * 3、递归查找子孙级
 * @author chenpeng
 * @date 2018/5/27 23:50
 */
public class CopyDir {
    public static void main(String[] args) {
        String srcPath = "F:/test/p";
        String desPath = "F:/test/q";
        copyDir(srcPath,desPath);
    }

    /**
     * 拷贝文件夹
     * @param srcPath 源路径
     * @param desPath 目标路径
     */
    public static void copyDir(String srcPath,String desPath){
        File src = new File(srcPath);
        File des = new File(desPath);
        copyDir(src,des);
    }


    /**
     * 拷贝文件夹
     * @param src 源File对象
     * @param des 目标File对象
     */
    public static void copyDir(File src,File des){
        if (src.isDirectory()){//文件夹
            des = new File(des,src.getName());
        }
        copyDirDetail(src,des);
    }

    /**
     * 拷贝文件夹细节
     * @param src
     * @param des
     */
    public static void copyDirDetail(File src,File des){
        if (src.isFile()){//文件
            try {
                CopyFileUtil.copyFILE(src,des);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }else if (src.isDirectory()){//文件夹
            //确保目标文件夹存在
            des.mkdirs();
            //获取下一级的目录或者文件
            for (File sub:src.listFiles()) {
                copyDirDetail(sub,new File(des,sub.getName()));
            }
        }
    }
}
    


posted @ 2018-06-21 09:49  惶者  阅读(188)  评论(0编辑  收藏  举报