黑马程序员日记-17

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

1:IO流的概述
 (1)用来处理设备(硬盘,控制台,内存)间的数据。
 (2)java中对数据的操作都是通过流的方式。
 (3)java用于操作流的类都在io包中。
 (4)按照流操作的数据的类型不同:分为字节流和字符流。
    字符流是为了方便中文的操作而来的。
 (5)按照流的流向不同分为:输入流,输出流。

2:字节流和字符流
 (1)字节流
  输入字节流:InputStream
  输出字节流:OutputStream
 (2)字符流
  输入字符流:Reader
  输出字符流:Writer
 (3)由于我们操作的是文件,所以,用的是字符的文件操作流
  A:FileReader
  B:FileWriter

3:FileWriter字符输出流(重点)
 Writer:
  write(int ch)
  write(char[] chs)
  write(char[] chs,int start,int end)
  write(String s)
  write(String s,int start,int end)
 
  flush():刷新缓冲区
  close():刷新缓冲区,并关闭流对象。

 功能:向文件中写入内容。
 步骤:
  A:创建字符输出流对象
   FileWriter fw = new FileWriter("a.txt");
  B:写入数据
   fw.write("hello");
  C:关闭流
   fw.close();

 注意的问题:
  A:流的操作会抛异常的。
  B:如何追加数据,而不是覆盖数据呢?
   是在构造中,传入第二个参数。表示是否追加
   FileWriter fw = new FileWriter("a.txt",true);
  C:如果换行呢?
   Windows识别的换行是:\r\n

4:FileReader字符输入流(重点)
 Reader:
  read():返回一个字符
  read(char[] chs):将字符读取到一个字符数组中,返回实际读取的元素个数。

 功能:从文件中读取数据,并输出到控制台。
 步骤:
  A:创建输入流对象
   FileReader fr = new FileReader("a.txt");
  B:通过输入流对象读取数据
   //int ch = fr.read();读取一个字符

   //第一种读取方式
   //为了读取多个,我们用循环改进
   int ch = 0;
   while((ch=fr.read())!=-1)
   {
    System.out.print((char)ch);
   }

   //第二种读取方式
   char[] chs = new char[1024]; //这个地方长度不好确定,但是,一般一1k为一个基本单位。
   int len = 0;
   while((len=fr.read(chs))!=-1)
   {
    System.out.print(new String(chs,0,len));
   }
  C:关闭输入流对象
  
5:复制文本文件(重点)
 思路:
  创建输入流对象,用于读取源文件中的数据。
  创建输出流对象,用于往指定文件写入数据。

1:字符缓冲流
 A:BufferedReader:readLine()
   BufferedWriter:newLine()

 B:如何使用呢?(重点)
   缓冲流底层操作的仍然用的是基本的字符流。

   BufferedReader br = new BufferedReader(new FileReader("a.txt"));
   BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));

   String line = null;
   while((line=br.readLine())!=null)
   {
  bw.write(line);
  bw.newLine();
  bw.flush();
   }

   bw.close();
   br.close();

 C:装饰设计模式和继承的区别(次重点)
   装饰更灵活。继承让类显得臃肿

2:字节流
 A:InputStream
   OutputStream

 B:FileInputStream
   FileOutputStream

 C:复制图片,复制MP3.

 D:复制MP3的时候,我们进行了测试。
   第一种:单个字节读写,效率低。
   第二种:单个字节读写,加高效,效率变高。
   第三种:字节数组读写,效率高。
   第四种:字节数组读写,加高效,效率更高。

 E:转换流
   字节流到字符流 InputStreamReader
   字符流到字节流 OutputStreamWriter

 

System.in(键盘输入),System.out(控制台的输出)
FileInputStream,FileOutputStream
FileReader,FileWriter

InputStreamReader,OutputStreamWriter

BufferedReader,BufferedWriter

第一件事情:从键盘获取数据,写到控制台。

//让输入流指向键盘
BufferedReader br = new BufferedReader(new InputStreamReader(Sysetm.in));
//让输出流指向控制台
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out))

String line = null
while((line=br.readLine())!=null)
{
 bw.write(line);
 bw.newLine();
 bw.flush();
}

bw.close();
br.close();


第二件事情:从键盘获取数据,写到文件中。

//让输入流指向键盘
BufferedReader br = new BufferedReader(new InputStreamReader(Sysetm.in));

//让输出流指向文件
BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));
//也可以如下使用
//BufferedWriter bw = new BufferedWriter(new OutputSteramWriter(new FileOutputStream("a.txt")));

String line = null
while((line=br.readLine())!=null)
{
 bw.write(line);
 bw.newLine();
 bw.flush();
}

bw.close();
br.close();

第三件事情:从文件中获取数据,写到控制台。
//让输入流指向文件
//BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputSteram("a.txt")));
//也可以如下写
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
//让输出流指向控制台
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

String line = null
while((line=br.readLine())!=null)
{
 bw.write(line);
 bw.newLine();
 bw.flush();
}

bw.close();
br.close();

第四件事情:从文件获取数据,写到文件中。
//让输入流指向文件
//BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputSteram("a.txt")));
//也可以如下写
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
//让输出流指向文件
BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
//也可以如下使用
//BufferedWriter bw = new BufferedWriter(new OutputSteramWriter(new FileOutputStream("b.txt")));

String line = null
while((line=br.readLine())!=null)
{
 bw.write(line);
 bw.newLine();
 bw.flush();
}

bw.close();
br.close();


操作流的规律:明确几个问题就可以很容易的操作流。

1:明确数据源和目的地。
 A:数据源
  InputStream,Reader
 B:目的地
  OutputStream,Writer

2:明确数据的内容是否是文本
 A:是
  数据源:Reader
  目的地:Writer
 B:否
  数据源:InputStream
  目的地:OutputStream

3:明确具体的设备
 A:数据源
  键盘输入(System.in),内存(数组或者字符串),硬盘(文件)
 B:目的地
  控制台(System.out),内存(数组或者字符串),硬盘(文件)

 如果是键盘和控制台的时候,考虑是否需要方便使用一些操作。
 如果需要,可能需要用到转换流。

4:是否需要高效
 A:是
  用Buffer的流
 B:否
  不用Buffer的流

举例分1:复制一个文本文件
1:明确数据源和目的地
 A:数据源
  InputStream,Reader
 B:目的地
  OutputStream,Writer
2:明确是否是文本
 A:是
  数据源:Reader - FileReader
  目的地:Writer - FileWriter
3:明确设备:
 数据源:文件 a.txt
 目的地:文件 b.txt

FileReader fr = new FileReader("a.txt");
FileWriter fw = new FileWriter("b.txt");

4:是否需要高效
 是

BufferedReader br = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));

举例分析2:把控制台的内容写到一个文件中
1:明确数据源和目的地
 A:数据源
  InputStream,Reader
 B:目的地
  OutputStream,Writer

2:明确是否是文本
 数据源不是:InputStream
 目的地是:  Writer - FileWriter

3:明确设备:
 数据源:键盘录入
 目的地:文件 b.txt

InputStream is = System.in;
FileWriter fw = new FileWriter("b.txt");

4:是否需要高效
 是

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值