您的位置:首页 > 职场人生

黑马程序员日记-17

2015-11-22 22:39 423 查看
------- 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"));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  笔记 java