黑马程序员 IO流

------- android培训java培训、期待与您交流! ----------------

IO流
 四大基类
   字节流两个基类:OutputStream 和 IntputStream
   字节流两个基类:Reader 和 Writer
1.字符流
    1.1字符流的特点
IO流是用来操作数据
        数据的最常见体现形式是:文件
一个专门用来操作文件的Writer子类对象是FileWriter
A.构造方法,传递String型文件名
B.读取的方法,单个字符,字符数组 
    1.2方法
FileReader 读取字符、
1.每次读一个字符 read()   返回值 int 每次读取的字符的个数
2.每次读一个字符数组 read(char[] chars) 返回值 int 每次读取的字符的个数
3.每次读一行 readLine() 返回值为所读的那一行的数据
注意:每次读取的时候,以\r\n 结束,当读到\r\n 的时候则表示一行读取结束
FileWriter 写字符
1.每次写一个字符 write()
2.每次写一个字符数组或者字符数组的一部分  write(char[] chars,int startIndex ,int endIndex) 
chars 代表了所读取的的数据
startIndex 代表了将要写入的数据在数组中的起始位置
endIndex 代表了将要写入的数据在数组中的结束位置

3.每次写一行 write(String line) 
line 代表了每次读取到的数据
注意:每次读的时候不会将\r\n 读取进来, 因此需要手动换行, 方法:newLine()

       注意:每次写入结束都需要刷新,flush()
刷新目的:将缓存的数据保存到文件中。
为了节省内存资源,每次程序结束是需要关闭资源 close()
2.字节流
InputStream 读取字节
1.每次读取一个字节 read()      返回值是int型 代表每次读取字节的个数
2.每次读取一个字节数组  read(byte[] bytes) 返回值是int型 每次读取的字节的个数

OutputStream  写字节
1.每次写一个字节 write()   
2.每次写一个字节数组,或者字节数组的一部分 write(byte[] bytes,int startIndex,int endIndex)
bytes 代表每次读取的数据
startIndex 代表每次写入的数据在数组中的起始位置
endIndex   代表每次写入的数据在数组中的结束位置 
3.字节流的缓冲区对象 -- 纯字节,字节数组
  BufferedInputStream
    构造方法,传递字节输入流
  BufferedOutputStream
    构造方法,传递字节输出流
  利用缓冲区复制,不如数组缓冲速度快
  字节流复制,字符流复制
  推荐使用数组缓冲,提高效率
  字符流,读写行的时候  

import java.io.*;
public class CopyDemo2 {

public static void main(String[] args)throws IOException {
//1.创建流对象
InputStream is = null;
OutputStream os = null;
//2.数据目的
is = new FileInputStream("D:\\a.exe");
os = new FileOutputStream("E:\\a.exe");
//规定每次最多读取字节数,存入字节数组,为1024字节
byte[] bt = new byte[1024];
int len = 0;
while ((len = is.read(bt))!=-1) {
//写入
os.write(bt,0,len);
//刷新
os.flush();
}
//3.关闭数据源
is.close();
}
}
4.
转换流
使用了字符流的概念,操作了字节流,简单方便,实现了字节流的行操作

InputSreamReader     
读入字节,返回值是字符  实现字节变字符
OutputStreamWriter
将输入的字符变成字节


两个转换流,构造方法中,传递的参数都是字节流


  InputStreamReader  传递字节输入流
  OutputStrreamWriter传递的是字节输出流

  Buffered进行包装
  BufferedReader包装字节转成字符的流,InputStreamReader,读取一行

    下面请看一个实例

从键盘输入字母,将字母转换成大写输出在控制台

/*
 *    读取键盘输入,将读取到的所有内容,转成大写,打印回控制台(System.out.println)
 System.out 标准输出流  --  OutputStream

 数据源,键盘输入 System.in  InputStream
 用转换流将数据源转成字符,读取一行

 用转换流,将字符转成字节,输出到控制台
 数据目的,是控制台System.out  OutputStream
 */

import java.io.*;

public class TranseDemo2 {
public static void main(String[] args) throws IOException {
// 创建流对象,数据键盘输入
InputStream in = System.in;
// 将in转成字符流,读取一行,存入字符流的缓冲区
BufferedReader bfr = new BufferedReader(new InputStreamReader(in));


// 数据源变成字符流,将字符数据输出到自节流的控制台
// 将字符流转成字节流,
// 既然OutputStreamWriter是字符流,可以用字符输出流的缓冲区
BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(
System.out));
String line = null;
while ((line = bfr.readLine()) != null) {
if ("over".equals(line)) 
break;
bfw.write(line.toUpperCase());
bfw.newLine();
bfw.flush();
}
}
}
 

  规律:
  A. 构造方法都是字节流
    B. 都是在用字符流的缓冲区,操作字节数据
 
  如果你确定,字节流中的数据也是文本数据,推荐使用转换流操作,方便简单
  数据源,和数据集目的,可以随时发生变化

---------------- ASP.Net+Unity开发.Net培训、期待与您交流! ---------------------- 详细请查看:www.itheima.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值