文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

文件的拷贝、字节流的缓冲区、BufferedInputStream类

2024-12-02 14:04

关注

一、文件的拷贝

文件的拷贝是通过输入流来读取文件的数据,通过输出流把数据写入文件。怎么进行文件复制的呢?使用FileInputStream类与FileOutputStream类复制文件。

首先在text文件夹下创建一个test06.txt文件,并写入内容为“Java进阶学习交流001、Java进阶学习交流002、Java进阶学习交流003”,如下图所示:

代码实现文件的拷贝如下所示:

  1. import java.io.*; 
  2. public class P06 { 
  3. public static void main(String[] args) throws Exception { 
  4.         // TODO Auto-generated method stub 
  5.         //创建一个字节输入流,读取text文件夹下test06.txt数据 
  6.         InputStream in = new FileInputStream("text/test06"); 
  7.         //创建一个字节输出流,用来读取数据并在text文件夹下创建一个test07.txt文件 
  8.         OutputStream out = new FileOutputStream("text/test07"); 
  9.         int num;//定义个int类型的变量num,保存每次读取的一个字节 
  10.         //复制文件前的系统时间 
  11.         long startTime=System.currentTimeMillis(); 
  12.         //while循环判断读取的一个字节是否读到文件的末尾 
  13.         while((num=in.read())!=-1){ 
  14.             //读到的数据写到文件中 
  15.             out.write(num); 
  16.         } 
  17.         //复制文件后的系统时间 
  18.         long endTime=System.currentTimeMillis(); 
  19.         System.out.println("复制文件所使用的时间是:"+(endTime-startTime)+"毫秒"); 
  20.         //关闭流 
  21.         in.close(); 
  22.         out.close(); 
  23.   } 

运行的结果如下图所示:

二、字节流的缓冲区

在实现文件拷贝时,如果一个个字节来读写,经常操作文件这样的效率太低了。首先创建一个字节数组来保存一次性读取多个字节的数据,再把字节数组中的数据一次性写入文件。这里的缓冲区相当字节数组!

如何使用缓冲区拷贝文件?

(1)首先在text文件夹下创建一个test08.txt文件,并写入内容为“HelloWorld,Java程序设计001!、HelloWorld,Java程序设计002!、HelloWorld,Java程序设计003!、HelloWorld,Java程序设计004!、HelloWorld,Java程序设计005!、HelloWorld,Java程序设计006!”,如下图所示:

(2)代码如下所示:

  1. import java.io.*; 
  2. public class P07 { 
  3. public static void main(String[] args) throws Exception { 
  4.         // TODO Auto-generated method stub 
  5.                 //创建一个字节输入流,读取text文件夹下test08.txt数据 
  6.                 InputStream in = new FileInputStream("text/test08"); 
  7.                 //创建一个字节输出流,用来读取数据并在text文件夹下创建一个test09.txt文件 
  8.                 OutputStream out = new FileOutputStream("text/test09"); 
  9.                 //定义字节数组使用缓存区读写文件数据 
  10.                 byte bt[]=new byte[1024]; 
  11.                 //定义一个int类型的变量num,保存读取读到缓冲区的字节数 
  12.                 int num; 
  13.                 //复制文件前的系统时间 
  14.                 long startTime=System.currentTimeMillis(); 
  15.                 //while循环判断读取的字节是否读到文件的末尾 
  16.                 while((num=in.read(bt))!=-1){ 
  17.                     out.write(bt,0,num); 
  18.                 } 
  19.                 //复制文件后的系统时间 
  20.                 long endTime=System.currentTimeMillis(); 
  21.                 System.out.println("复制文件所使用的时间是:"+(endTime-startTime)+"毫秒"); 
  22.                 //关闭流 
  23.                 in.close(); 
  24.                 out.close(); 
  25.   } 

运行的结果如下图所示:

上面代码中主要实现了test08.txt文件的拷贝,拷贝过程中使用到了while循环将字节文件进行拷贝,每循环一次在test08.txt文件中读取很多个字节保存到数组中,通过变量num保存读取的数组的字节数,从数组的第一个字节开始,把num个字节写到文件中,当num值为-1,读取文件就结束了。最终实现了文件之间的拷贝是通过字节流的缓冲区。

三、BufferedInputStream类

BufferedInputStream是缓冲输入流,可以减少访问磁盘的次数,提高文件的读取性能,它是FilterInputStream类的子类。

BufferedInputStream作用它相对于普通输入流优点是,它有一个缓冲数组,每次去调用read()方法,先从缓冲区读取数据,如果读取数据失败,从文件读取新数据放到缓冲区,再把缓冲区的内容显示出来。

如何用BufferedInputStream类读取文本内容?

(1)定义一个字节数组bt,再通过循环把文本内容循环读到bt中,再把读取到的数据显示出来。

(2)首先再text文件夹下创建一个test10.txt文件并写入"Java进阶学习交流001!"的内容。

(3)代码的实现:

  1. import java.io.*; 
  2. public class P08 { 
  3. public static void main(String[] args) throws Exception { 
  4.         // TODO Auto-generated method stub 
  5.         //创建一个带有缓冲区的输入流 
  6.         BufferedInputStream bi = new BufferedInputStream(new FileInputStream("text/test10")); 
  7.         //定义字节数组 
  8.         byte[] bt = new byte[1024]; 
  9.         int num = 0; 
  10.         //判断是否读到文件的末尾 
  11.         while ((num = bi.read(bt)) != -1) { 
  12.         //读取的字节转为字符串对象 
  13.         String s = new String(bt, 0, num); 
  14.         System.out.println("读取的内容是:"+s); 
  15.         } 
  16.         //关闭流 
  17.         bi.close(); 
  18.         } 

运行的结果如下图所示:

四、总结

本文主要介绍了文件的拷贝、字节流的缓冲区、BufferedInputStream类。文件的拷贝是输入流来读取文件的数据,通过输出流把数据写入文件。字节流的缓冲区创建一个字节数组来保存一次性读取多个字节的数据,再把字节数组中的数据一次性写入文件。BufferedInputStream是缓冲输入流,可以减少访问磁盘的次数,提高文件的读取性能,它是FilterInputStream类的子类;它有一个缓冲数组,每次去调用read()方法,先从缓冲区读取数据,如果读取数据失败,从文件读取新数据放到缓冲区,再把缓冲区的内容显示出来。希望通过本文的学习,对你有所帮助!

本文转载自微信公众号「Java进阶学习交流」,可以通过以下二维码关注。转载本文请联系Java进阶学习交流公众号。

 

来源:Java进阶学习交流内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯