二、关于java中的IO的基础知识点之文件的拷贝

一、背景

1.在应用程序中,IO流通常是成对出现的,即输入流和输出流一起使用,例如文件的拷贝就需要通过输入流来读取文件中的数据,通过输出流将数据写入文件。

二、代码示例

1.代码演示

public static void main(String[] args) throws Exception {
        //创建一个字节输入流,用于读取当前目录下source文件夹中的MP3文件
        FileInputStream in = new FileInputStream("sources\\江南 style.mp3");
        //创建一个字节输出流,用于读取当前目录下source文件夹中的MP3文件写入target目录下的文件中
        FileOutputStream out = new FileOutputStream("target\\江南 style.mp3");
        //定义一个int类型的变量len,记住每次读取的一个字节
        int len;
        long begintime = System.currentTimeMillis();
        while((len=in.read())!=-1){
            out.write(len);
        }
        long endtime =  System.currentTimeMillis();
        System.out.println(endtime-begintime);
        in.close();
        out.close();
    }

2.代码分析

这样是比较费时间的,接下来我们就利用另外一个方式来完成我们的文件的复制操作。

三、另外的方式

1.为了提高效率也可以定义一个字节数组作为缓冲区,在拷贝文件时,可以一次性读取多个字节的数据,并保存在字节数组中,然后将字节数组中的数据一次性写入文件,接下来我们就来学习下如何使用缓冲区拷贝文件。

2.代码演示

public static void main(String[] args) throws Exception {
        //创建一个字节输入流,用于读取当前目录下source文件夹中的MP3文件
        FileInputStream in = new FileInputStream("sources\\江南 style.mp3");
        //创建一个字节输出流,用于读取当前目录下source文件夹中的MP3文件写入target目录下的文件中
        FileOutputStream out = new FileOutputStream("target\\江南 style.mp3");
        //以下创建一个缓冲区用来读写文件
        byte[] buff = new byte[1024];
        //定义一个int类型的变量len,记住每次读取的一个字节
        int len;
        long begintime = System.currentTimeMillis();
        while((len=in.read(buff))!=-1){
            //从第一个字节开始,向文件写入len个字节
            out.write(buff,0,len);
        }
        long endtime =  System.currentTimeMillis();
        System.out.println(endtime-begintime);
        in.close();
        out.close();
    }

3.这样消耗的时间明显的减少了很多,从而说明缓冲区读写文件可以有效的提高程序的效率,这是因为程序中的缓冲区就是一块内存,用于暂放输入输出的数据,使用缓冲区减少了对文件的操作次数,所以可以提高读写的效率。

四、结束

1.以上就是两种方法对文件的复制操作,下面的方法是比较高效的,一般用的也比较多!!!

发布了122 篇原创文章 · 获赞 64 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/chenmingxu438521/article/details/102461333