• IO拷贝文件


    1、高效缓冲区拷贝文件:

    (下面高效缓冲字符流拷贝文件有点问题,拷贝文件数据多,字符流没问题)

    缓冲流(包装流):是一个包装流,目的起缓存作用。

    BufferedInputStream :A BufferedInputStream为另一个输入流添加了功能,即缓冲输入和支持 mark和 reset方法的功能。 

    BufferedOutputStream:该类实现缓冲输出流。 

    BufferedReader :从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取。 

    BufferedWriter :将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高

    建议拷贝文件使用字节流,拷贝纯文本文件使用字符流

    字节流可以操作一切文件(纯文本/二进制文件)

    字符流是用来操作中文纯文本使用的,本身是对字节流得增强。

    import java.io.*;
    
    /**
     * 拷贝文件
     */
    public class FileDemo05 {
        public static void main(String[] args) {
            //创建源
            File srcFile=new File("D:"+File.separator+"360Download"+File.separator+"Navicat+Premium+12.zip");
            //创建目标对象目录
            File dir=new File("D:"+File.separator+"FilesTest"+File.separator);
    //        test1(srcFile,dir);
            test2(srcFile,dir);
        }
    
        /*
        字节缓冲流拷贝文件
         */
        public static void test1(File srcFile, File dir) {
            try{
                //输入流工具
                InputStream inputStream=new BufferedInputStream(new FileInputStream(srcFile));
                //输出流工具
                OutputStream outputStream=new BufferedOutputStream(new FileOutputStream(new File(dir,srcFile.getName())));
                //缓冲区
                byte[] bytes=new byte[1024];
                int len=-1;
                while ((len=inputStream.read(bytes)) != -1){
                    outputStream.write(bytes);
                }
                outputStream.flush();
    
                inputStream.close();
                outputStream.close();
    
            }catch(IOException e){
                e.printStackTrace();
            }
        }
        /*
        字符缓冲流拷贝文件
         */
        public static void test2(File srcFile,File dir){
            try{
                Reader reader=new BufferedReader(new FileReader(srcFile));
                Writer writer=new BufferedWriter(new FileWriter(new File(dir,srcFile.getName())));
                char[] chars=new char[1024];
                int len=-1;
                while ((len=reader.read(chars)) != -1){
                    writer.write(chars,0,len);
                }
                writer.flush();
    
                reader.close();
                writer.close();
            }catch(IOException o){
                o.printStackTrace();
            }
        }
    }

    2、字节流文件:

    下面是拷贝压缩包。

    import java.io.*;
    
    /**
     * 文件的拷贝操作
     */
    public class FileDome02 {
        public static void main(String[] args) {
            //创建拷贝对象
            File file=new File("D:"+File.separator+"360Download"+File.separator+"Navicat+Premium+12.zip");
            //创建目标对象目录
            File dir=new File("D:"+File.separator+"FilesTest"+File.separator);
            //创建输入流对象(管道)
            InputStream inputStream=null;
            //创建输出流对象(管道)
            OutputStream outputStream=null;
            try{
                inputStream=new FileInputStream(file);
                outputStream=new FileOutputStream(new File(dir,file.getName()));
                //创建一个字节数组用于缓存  read(byte[] b)    从该输入流读取最多 b.length个字节的数据为字节数组。
                    byte[] bytes=new byte[1024];
                    int len=-1;
    
                    //管道操作
                    while ((len=inputStream.read(bytes)) !=-1){
                        // 从该输入流读取最多 b.length个字节的数据为字节数组。
                        outputStream.write(bytes,0,len);
                    }
                    outputStream.flush();
    
                System.out.println("拷贝完成!!");
    
            }catch(IOException e){
                e.printStackTrace();
            }finally{
                try{
                    //关闭资源(管道)
                        inputStream.close();
                        outputStream.close();
    
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
        }
    }

     3、字符流拷贝文件与字节很相似

    import java.io.*;
    
    /*
    字符流文件拷贝
     */
    public class FileDemo04 {
        public static void main(String[] args) {
            //创建源
            File srcFile=new File("D:"+File.separator+"360Download"+File.separator+"Navicat+Premium+12.zip");
            //创建目标对象目录
            File dir=new File("D:"+File.separator+"FilesTest"+File.separator);
            //读 管道
            Reader reader=null;
            //写 管道
            Writer writer=null;
            try{
                reader=new FileReader(srcFile);
                writer=new FileWriter(new File(dir,srcFile.getName()));//从父抽象路径名和子路径名字符串创建新的 File实例。
                //创建缓冲char[]数组
                char[] chars=new char[1024];
                int len=-1;
                while ((len=reader.read(chars))!= -1){
                    writer.write(chars,0,len);
                }
                //刷新
                writer.flush();
                System.out.println("拷贝完成!");
            }catch (IOException o){
                o.printStackTrace();
            }finally{
                //关闭资源
                try{
                    reader.close();
                    writer.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
        }
    }

    import java.io.*;

    /**
    * 拷贝文件
    */
    public class FileDemo05 {
    public static void main(String[] args) {
    //创建源
    File srcFile=new File("D:"+File.separator+"360Download"+File.separator+"Navicat+Premium+12.zip");
    //创建目标对象目录
    File dir=new File("D:"+File.separator+"FilesTest"+File.separator);
    // test1(srcFile,dir);
    test2(srcFile,dir);
    }

    /*
    字节缓冲流拷贝文件
    */
    public static void test1(File srcFile, File dir) {
    try{
    //输入流工具
    InputStream inputStream=new BufferedInputStream(new FileInputStream(srcFile));
    //输出流工具
    OutputStream outputStream=new BufferedOutputStream(new FileOutputStream(new File(dir,srcFile.getName())));
    //缓冲区
    byte[] bytes=new byte[1024];
    int len=-1;
    while ((len=inputStream.read(bytes)) != -1){
    outputStream.write(bytes);
    }
    outputStream.flush();

    inputStream.close();
    outputStream.close();

    }catch(IOException e){
    e.printStackTrace();
    }
    }
    /*
    字符缓冲流拷贝文件
    */
    public static void test2(File srcFile,File dir){
    try{
    Reader reader=new BufferedReader(new FileReader(srcFile));
    Writer writer=new BufferedWriter(new FileWriter(new File(dir,srcFile.getName())));
    char[] chars=new char[1024];
    int len=-1;
    while ((len=reader.read(chars)) != -1){
    writer.write(chars,0,len);
    }
    writer.flush();

    reader.close();
    writer.close();
    }catch(IOException o){
    o.printStackTrace();
    }
    }
    }
  • 相关阅读:
    Java的数组的作业11月06日
    e课表项目第二次冲刺周期第九天
    e课表项目第二次冲刺周期第八天
    e课表项目第二次冲刺周期第七天
    e课表项目第二次冲刺周期第六天
    e课表项目第二次冲刺周期第五天
    e课表项目第二次冲刺周期第四天
    e课表项目第二次冲刺周期第三天
    e课表项目第二次冲刺周期第二天
    e课表项目第二次冲刺周期第一天
  • 原文地址:https://www.cnblogs.com/Zeng02/p/12775744.html
Copyright © 2020-2023  润新知