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();
}
}
}
posted @ 2020-04-25 22:19  漫步花海下的oldman  阅读(129)  评论(0编辑  收藏  举报