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

黑马程序员——IO流学习笔记

2015-12-13 14:42 465 查看

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

IO流



 

一、概念

流按操作数据分:字节流,字符流
按流向分为:输入流输出流
英文编码表:ASICCI码
汉子编码表:GB2312,扩容后GBK
国际标准码表:UNICODE,优化后变为utf-8;
字符流读取的时候用什么码表可以有我们自己指定,这样处理文字就变得很方便
所以处理文字用字符流方便,处理图片用字节流方便,通用字节流
四个流的基类:InputStream,OutputStream,Reader,Writer
所有的子类都以这四个类作为后缀名

二、字符流Reader.Writer

一般我们用FileWriter文件输出流
创建一个文件对象和一个FileWrter对象,该对象一初始化就要明确被操作的文件。
而且该文件被创建到指定的目录下,如果有同名文件,将会被覆盖,这步就是为了明确数据要存放的目的地
File file=new File("demo.txt");
     FileWriterfw=new FileWriter(file);
fw就是一个流,把类容写到fw这个流中
fw.write("abcde");
并且把流的数据写到文件中
fw.flush();或者用fw.close();
这些方式都是在使用Windows的资源

三、IO异常的处理

异常的标准处理如下
FileWriter fw=null;
      try {
//这里有可能产生文件找不到异常,和IO异常
        fw = new FileWriter("file.txt");
     fw.write("abc");
     } catch (IOException e) {
        e.printStackTrace();
     }finally{
      try {
//这里可能报空指针异常和IO异常
         if(fw!=null){
           fw.close();
        }
     } catch (IOException e) {
        e.printStackTrace();
     }
     }

四、文件的续写

在参数中传递true,那么表示文件可以续写,把新内容写到文件中去
fw = new FileWriter("file.txt",true);
        fw.write("哈哈");
在写入文件中换行的话,由\r\n表示换行

五、文件的读取

  FileReaderfr=new FileReader("file.txt");
   方式一、一次读一个字符
len=fr.read();
方式二、一次读取一个字符数组的字符
char[] c=newchar[4];
      int len=0;
      while((len=fr.read(c))!=-1){
        System.out.println(len);
     }

六、文件的拷贝

建立输入流和输出流
FileReader fr=new FileReader("file.txt");
     FileWriter fw=new FileWriter("copy.txt");
 
      char[] c=newchar[1024];
      int len=0;
读取文件
      while((len=fr.read(c))!=-1){
        fw.write(c,0,len);    }
关闭流
     fr.close();
     fw.close();

七、字符流缓冲区BufferedWriter,BufferedWriter

1、文件写入:
FileWriter fw=new FileWriter("copy.txt",true);
     BufferedWriter bw=new BufferedWriter(fw);
     bw.write("你好jiayou a");
     bw.close();关闭缓冲区就是关闭流,所以不用fw.close();
bw.newline();换行,可以跨平台,在windows和linux都是换行
   2、文件读取
FileReader fr=new FileReader("file.txt");
     BufferedReader buf=new BufferedReader(fr);
     String s=null;
文件的读取,readLine一次读取一行,方便对文本数据的获取,如果返回null表示文件读完
      while((s=buf.readLine())!=null){
        System.out.println(s);
     }

八、读取键盘输入

        System.out对应的标准输出设备,System.in对应的标准输入设备
从键盘读取输入流
InputStreamis=System.in;<
4000
/p>
      //定义一个缓冲区
     StringBuilder sb=new StringBuilder();
      while(true){对读取的字符判断,如果是换行,进行下面的判断
         int ch=is.read();
         if(ch=='\r')
            continue;
         if(ch=='\n'){如果是换行符,把缓冲区的变为字符串
           String s=sb.toString();
            if("over".equals(s)){如果字符串是over,那么程序结束
                break;
           }else{如果不是over,打印字符串,并且清空缓冲区
               System.out.println(s);
               sb.delete(0, sb.length());
           }
        }else{如果不是换行,把字符添加到缓冲区
           sb.append((char)ch);
        }
     }

九、转换流

InputStreamReader操作字节流的字符流对象,是字节流通向字符流的桥梁,可以把字节流转换为字符流
outputstreamwriter为把字符转换为字节的类
从键盘读取数据,
InputStreamis=System.in;
把字节流转换为字符流
     InputStreamReader isr=new InputStreamReader(is);
把字符流装进缓冲区
     BufferedReader bufr=new BufferedReader(isr);
     创建一个字节输出流
     OutputStream os=System.out;
把字符流转换为字节流输出
     OutputStreamWriter osw=new OutputStreamWriter(os);
创建一个字符流缓冲区
     BufferedWriter bufw=new BufferedWriter(osw);
     
     String s=null;
      while((s=bufr.readLine())!=null){
         if("over".equals(s))
            break;
         bufw.write(s);
         bufw.newLine();换行
     }
      bufw.close();
     bufr.close();
键盘输入合为一句
BufferedReader bufr=
new BufferedReader(newInputStreamReader(System.in))
BufferedWriterbufw=
new BufferedWriter
(newOutputStreamWriter(newFileOutputStream("file.txt")))
把键盘的输入写入文件:
OutputStreamos=newFileOutputStream("file.txt");

十.流操作规律

1、明确源和目的
   源:输入流inputstream,reader
   目的:输出流outputstream,writer
2、操作的是否纯文本
是:字符流
不是:字节流
3、当体系明确后,在明确要使用哪个具体的对象
通过设备来进行区分,
源设备:内存,硬盘,键盘
目的设备:内存,硬盘,控制台

十一、指定编码表

转换流可以指定编码表
BufferedWriterbufw=
new BufferedWriter
(newOutputStreamWriter
(newFileOutputStream("file.txt"),"utf-8"));在写的时候可以以utf-8的编码来存,读取也一样,对应的
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  黑马程序员 java io流