黑马程序员----IO总结

本文详细介绍了文件流的基本操作流程,包括如何明确源和目的、根据数据类型选择字符流或字节流,以及如何根据设备选择合适的流对象。并通过三个具体实例展示了如何实现键盘输入到控制台输出、键盘输入到文件保存、文件读取到控制台输出等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ASP.Net+Android+IOS开发.Net培训、期待与您交流!

文件流的基本操作:
    通过两个明确来完成流的操作
 (一)、明确源和目的
     源,输入流  InputStream,Reader
  目的,输出流 OutputStream,Writer
 (二)、操作的数据是否为纯文本
         是,用字符流
   不是,用字节流
 (三)、当体系明确时,在明确要使用哪个具体的对象
         通过设备来进行区分
   源设备:内存,硬盘,键盘
   目的设备:内存,硬盘,控制台
   
练习1、在键盘上输入信息,并以大写方式输出到控制台上
     (一)、源:键盘输入
          目的:控制台
练习2、将键盘输入的信息保存到文件中
 (一)、源:键盘输入
   目的:文件
练习3、将文件中的信息输出到控制台
 (一)、源:文件
   目的:控制台
第一个需求:讲一个文本文件复制到另一个文本文件
  源:使用读取流InputStream  Reader ,由于是文本文件,选择字符流Reader
  接下来明确设备,硬盘上的文件,Reader体系中可以操作文件的对象是FileReader
 
  目的: 使用写入流OutputStream, Writer  , 由于是文本文件,选择Writer
  接下来明确设备,硬盘上的文件,Writer体系中可以操作文件的是FileWriter
 
  是否提高效率,是,加入BufferedWriter和bufferedReader对象
练习:将图片文件数据存入另一个文件中,自己明确需求

第二个需求:将键盘输入的信息保存到文件中
   元和目的是否都存在
   源:InputStream , Reader
   是不是纯文本,纯文本用Reader
  
   设备:键盘,对应的对象时System.in
   不是选择Reader吗?System.in对应的对象时InputStream(字节流吗)
   InputStream in = new InputStream(System.in);
   为了操作键盘的文本数据方便,转化为字符流处理,为了操作数据更加方便,所以在此使用Reader字符流,
   这样就需要使用InputStreamReader类将字节输入流转化为字符流Reader对象
   FileReader fr = new InputStreamReader(in);
  
   如果要提高效率,加入缓冲技术(BufferedReader)
   BufferedReader br = new BufferedReader(fr);
  
   目的:outputStream  Writer
   由于是对字符流的操作,我们使用Writer对象
  
   设备:硬盘上的文件,在Writer体系中对文件的操作位FileWriter对象,该对象主要用于对硬盘上文件的写入操作
   FileWriter fw = new FileWriter("filename");
  
   考虑是否要提高操作效率,如果要提高操作效率,使用带有缓冲技术BufferedWriter对象
   BufferedWriter bw = new BufferedWriter(fw);
  
  
  
   扩展:想要把录入的数据按照指定编码表(GBK,UTF-8)将数据存到一个纯文本文件中
   但是存储时,需要加入制定的编码表,而指定的编码表只有转化流可以指定所以要使用
   的对象为OutPutStreamWriter。
   而这一转化流对象要接受一个字节输入流,而且还可以操作的文件的字节,FileOutputStream

    OutputStreamWriter osw= new  OutputStreamWriter(new FileOutputStream("d:a.txt"),"UTF-8");
    需要高效不?需要就使用BufferedWriter对象)
    BufferedWriter  bw = new BufferedWriter(osw); 
 
第三个需求:将硬盘上文件内容读到控制台
    元和目的分别为:硬盘上文件,控制台
 源的分析:InputStream、Reader
 由于是操作的硬盘上的文件,字符流使用FileReader
 FileReader fr = new FileReader("filename");
 
 是否要提高效率,如果要提高效率,使用字符流中的BufferedReader提升
 BufferedReader br = new BufferedReader(fr);
 
 目的:使用的流为OutputStream、Writer
 由于本操作对应的是控制台,是字符流使用Writer,但是设备是控制台应该用System.out,对应着字节流PrintWriter
 FileOutputStream fos = new FileOutputStream(System.out);
 
 为了便于操作,将字节流转化为字符流Writer,使用OutputStreamWriter可以实现将OutputStream分支转化为Writer分支
 OutputStreamWriter osw = new OutputStreamWriter(fos);
 
 如果想提升效率,可以使用缓冲带技术的BufferedWriter来实现
 

ASP.Net+Android+IOS开发.Net培训、期待与您交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值