io包之:字符流

io包之:字符流(流的转换)

一、字符流

1.概念

字符流是字符串的一种传输模式

2.分类

2.1Reader类

案例1:字符流实现文件的读取(单个字符模式)

      FileReader fr=new FileReader("e:\\aa.txt");

      int n=0;

      while((n=fr.read())!=-1){  //如读取到文件最后(返回-1)

            System.out.println((char)n);

      }

      fr.close();

或者:

      File f = new File("e:\\aa.txt");

      FileReader fr=new FileReader(f);

      char[] cbuf=new char[(int)f.length()];

      int n=0;

      while((n=fr.read(cbuf))!=-1){  //如读取到文件最后(返回-1)

            System.out.println(new String(cbuf));

      }

      fr.close();

案例2:字符流实现文件的读取(一行模式)

FileReader fr=new FileReader("e:\\aa.txt");

BufferedReader br=new BufferedReader(fr);   //FileReader继承了reader

String str=null;

while((str=br.readLine()) != null){            //每次只读取一行

System.out.println(str);

}

br.close();

fr.close();

2.1.1FileReader类

int   read();      //读取单个字符,如果读到文件尾,返回-1

int   read(char[] ch);     //将流中的字符读入到char数组

2.1.2BufferedReader类     

String   readLine();     //每次读取一行(说明它是以换行为分割标识的)

2.2Writer类

案例1 通过字符流写文件

FileWriter fw=new FileWriter("e:\\1.txt");

fw.write("abcdef");

fw.close();

 

 

案例2 通过字符流写多行

FileWriter fw=new FileWriter("e:\\1.txt");

fw.write("abcdef   ");

fw.write("123456789   ");

fw.write("好好学习");

fw.close();

2.2.1FileWriter类

void        write(int n)         //写入单个字符

void        write(String str) //写入字符串

void        write(char[] ch)    //写入字符数组

2.2.1BufferedWriter类

void        newLine()      //写入一个换行符

void        flush()            //刷新缓冲区中的数据

二、模仿Scanner控制台输入功能

InputStream is = System.in;         //System.in是系统标准输入流,返回字节输入流

byte[] bs = new byte[1024];         //设置接收数组为1024字节

int n = is.read(bs);        //读取流中间的内容,放入bs字节数组。(返回读取的个数)

String str=new String(bs,0,n);     //将字节数组bs,从下标0开始到n的内容转换成字符串

System.out.println(str.trim());     //去空白

三、字节流转字符流

重点案例:一边读一边写

File f = new File("e:\\1.txt");

      //字符输出流

      FileWriter fw = new FileWriter(f);

      BufferedWriter bw = new BufferedWriter(fw);

      //字节输入流解码字符输入流

      InputStream is = System.in;   //创建系统设备标准输入流(字节模式)

      InputStreamReader isr = new InputStreamReader(is);  //将字节解码字符

      BufferedReader br = new BufferedReader(isr);  //创建字符输入流

      while(true){

          //读控制台输入的

          String str = br.readLine();  //从控制台接收内容中读取一行

          if(str.equals("exit"){     //如果是"exit"就退出

            break;

          }

          //写控制台输入的

          bw.writer(str);  //str为控制台输入的一行字符串

          bw.newLine();    //换行

      }

      bw.flush();

      bw.close();

      isr.close();

      fw.close();

1.InputStreamReader        字节输入流 转 字符输入流

作用:将字节流转换成字符流

InputStreamReader是字节流通向字符流的桥梁,它读取字节并将其解码为字符。

2.OutputStreamWriter    字节输出流 转 字符输出流

四、全面掌握IO(输入/输出流)

1.InputStream最重要的三个read方法:

abstract   read()       //从输入流中读取数据的下一个字节

int       read(byte[] b)          //从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中。

int       read(byte[] b, int off, int len)  //将输入流中最多len个数据字节读入byte数组

2.Reader中的read方法:

int       read()   //读取单个字符

int       read(char[] cbuf)     //将字符读入数组

abstract   read(char[] cbuf, int off, int len)        //将字符读入数组的某一部分

int       read(CharBuffer target)     //试图将字符读入指定的字符缓冲区

  1. OutputStream中最重要的write方法:

void          write(byte[] b)   //将b.length个字节从指定的byte数组写入此输出流。

void          write(byte[] b, int off, int len)      //将指定byte数组中从偏移量off开始的len个字节写入此输出流。

abstract void      write(int b)   //将指定的字节写入此输出流

  1. Writer中最重要的write方法

void          write(char[] cbuf)          //写入字符数组

abstract void      write(char[] cbuf, int off, int len)       //写入字符数组的某一部分

void          write(int c)          //写入单个字符

void          write(String str)       //写入字符串

void          write(String str, int off, int len)    //写入字符串的某一部分

猜你喜欢

转载自blog.csdn.net/LYQ2332826438/article/details/81458959