A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 方志亮 中级黑马   /  2013-1-8 21:58  /  1254 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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:复制文本文件
思路:
  创建输入流对象,用于读取源文件中的数据。
  创建输出流对象,用于往指定文件写入数据。
6:字符缓冲流
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:装饰设计模式和继承的区别
   装饰更灵活。继承让类显得臃肿

7:字节流

          A:InputStream
   OutputStream

B:FileInputStream
   FileOutputStream

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

从键盘获取数据,写到控制台。

//让输入流指向键盘
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"));

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

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

举例分析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"));

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

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

评分

参与人数 1黑马币 +30 收起 理由
高境 + 30 很给力!

查看全部评分

1 个回复

倒序浏览
比较实用 谢谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马