美文网首页我爱编程
四、Java高级--9、文件拷贝和buffer

四、Java高级--9、文件拷贝和buffer

作者: cybeyond | 来源:发表于2018-05-28 14:49 被阅读0次

1、文件拷贝

拷贝二进制的文件使用字节流,拷贝文本文件使用字符流
示例1:将d盘下的一个压缩文件拷贝到e盘目录下(压缩文件为字节流)

package javastudy;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test17 {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        FileInputStream fis=new FileInputStream("D:\\图片压缩工具.rar");
        FileOutputStream fos=new FileOutputStream("E:\\myfile.rar");
        int ch=0;
        while((ch=fis.read())!=-1){  // 逐个字节读取压缩文件,但是效率比较慢
            fos.write(ch);
                        }
        fis.close();
        fos.close();
    }
}
执行结果

上述结果执行时,由于是每个字节读取,因此速度比较慢,通过设置缓冲区的方式,提高效率

package javastudy;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test17 {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        FileInputStream fis=new FileInputStream("D:\\图片压缩工具.rar");
        FileOutputStream fos=new FileOutputStream("E:\\myfile.rar");
        int ch=0;
        byte [] data=new byte[1024];//定义一个1024长度的字节数组,即设置缓冲区
        while((ch=fis.read(data))!=-1){  // 将fis对象文件逐个读到数组中,每次为1024长度
            fos.write(data,0,ch);//从数据第零个开始,直到第ch个,即最后可能不是1024长度
       System.out.println(ch); //通过打印ch,可以看到最后一个不是正好是1024
        }
        fis.close();
        fos.close();
    }
}

执行结果1
执行结果2

2、buffer,装饰模式

将上述的代码,使用buffer形式,也就是通过装饰模式进行,在执行大文件拷贝时,效率会有提升。

package javastudy;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test17 {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        FileInputStream fis=new FileInputStream("D:\\图片压缩工具.rar");
        BufferedInputStream bis=new BufferedInputStream(fis);//装饰模式,即将fis在被包装一层
        FileOutputStream fos=new FileOutputStream("E:\\myfile.rar");
        BufferedOutputStream bos=new BufferedOutputStream(fos);
        int ch=0;
        byte [] data=new byte[1024];//定义一个1024长度的字节数组,即设置缓冲区
        while((ch=bis.read(data))!=-1){  // 将fis对象文件逐个读到数组中,每次为1024长度
            bos.write(data,0,ch);//从数据第零个开始,直到第ch个,即最后可能不是1024长度
            System.out.println(ch);
        }
        fis.close();
        fos.close();
    }
}
执行结果

相关文章

网友评论

    本文标题:四、Java高级--9、文件拷贝和buffer

    本文链接:https://www.haomeiwen.com/subject/xcyujftx.html