I/O流的用法

本文介绍了I/O流的基本概念,包括输入/输出流、字节流与字符流的区别及应用。通过示例展示了如何使用FileReader、FileWriter等进行文件读写操作,并解释了缓冲区的作用。

I/O流的基本概念


I/O流: 输入/输出流

数据流按流动的方向分为:输入流与输出流

数据流按字符和字节分为:字节流与字符流

读/写二进制数据称为字节流

读/写字符数据称为字符流

字符:abcdefl....1234234!@#%!^$&!%*@#$ 中国


字符流的父类是:Writer/Reader

// 文件结束的标记是:-1

使用示例FileReader:
/*
 * 需求: 使用I/O流技术编写一个程序,该程序能够读取*.txt文件里的内容
 * 读取字符的示例:使用的是字符流FileReader
 */
public class FileReaderTest {
 public static void main(String[] args) throws IOException {
  // 读取.txt文件里的数据,为什么我要选FileReader?
  // 因为.txt文件里存放的都是"字符",所以选用字符流来读取,
  // 而又因为是读操作,所以选用Reader下的子类:FileReader
  FileReader reader = new FileReader("E:\\1.txt");
  int value = 0;
  while( (value = reader.read()) != -1 ) {
   System.out.println((char)value);
  }
  reader.close();
 }
}

/*
 * 需求: 使用I/O流技术编写一个程序,该程序能够向*.txt文件写一串字符
 */
public class FileWriterTest {
 public static void main(String[] args) throws IOException {
  
  // 相当于建立一根水管
  // 同时也相当于打开1.txt文件
  FileWriter fw = new FileWriter("e:/1.txt");
  
  // 把数据写到了内存上,此时还没写到硬盘上
  // 具体来说,是写到了FileWriter这个对象的缓冲区里面。
  fw.write(66);
  
  // 调用flush方法,会刷新缓冲区里的内存到硬盘上去。
  // 相当于点了“保存”按钮
//  fw.flush();
  
  // 关闭流对象
  // close()方法内部会自动先调用flush()方法
  fw.close();
  
//  FileWriter fw = new FileWriter("e:\\1.txt");
  
 }
}

/*
 * 需求: 把D盘上的1.txt文件拷贝到E盘上
 */

public class CopyTest {
 public static void main(String[] args) throws IOException {
  FileReader fr = new FileReader("D:\\1.txt");
  FileWriter fw = new FileWriter("E:\\1.txt");
  int i = 0;
  while((i = fr.read()) != -1) {
//   System.out.println((char)i);
   fw.write(i);
  }
  fr.close();
  fw.close();
 }
}


为什么这些流需要缓冲区呢?
答:因为使用缓冲区可以加快速度。

BufferedReader/BufferedWriter

BufferedReader/BufferedWriter使用了设计模式里的“装饰设计模式”
 public static void main(String[] args) throws IOException {
//  FileReader reader = new FileReader("E:\\1.txt");
//  int value = 0;
//  while( (value = reader.read()) != -1 ) {
//   System.out.print((char)value);
//  }
//  reader.close();
  
  BufferedReader br = new BufferedReader(new FileReader("E:\\1.txt"));
  // 强烈推荐使用readLine()方法,因为每次可以读取一行.
  
  String line = "";
  while((line = br.readLine()) != null) {
   System.out.println(line);
  }
  br.close();
 }

 public static void main(String[] args) throws IOException {
  BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\1.txt"));
  bw.write("xxxxxx");
  bw.close();
 }

/*
刚才学的全都属于“字符流”的操作:
FileReader: 专门用来读文件的(输入流,字符流)
FileWrtier: 专门用来写文件的(输出流,字符流)
BufferedReader:可以用来读文件的(输入流,字符流),默认带缓冲区的,可以加快速度,而且有一个readLine()方法很好用!
BufferedWriter:可以用来写文件的(输入流,字符流),默认带缓冲区的,可以加快速度,而且有一个write(String str)方法很好用,一次可以写一串字符数据,很方便!
*/


字节输入流的父类:InputStream
字节输出流的父类:OutputStream
具体使用的时候,使用FileInputStream和FileOutputStream

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值