黑马程序员---Java IO 学习笔记

Java IO 学习笔记

(一)A.按操作数据分:字节流(抽象基类:InputStream,OutputStream)与字符流(抽象基类:Reader,Writer)。      B.按流向分:输入流和输出流。

 

(二)FileWriterwriter()方法是将字符串写入到流中,flush()方法将数据刷新到目的地,即目标文件中。操作流一定要记得调用close方法关闭资源。该方法关闭流资源前会刷新一次内部缓存区的数据。

 

(三)IO异常处理:

package cn.cx.io.file;

import java.io.FileWriter;

import java.io.IOException;

publicclass FileDemo02 {

    publicstaticvoid main(String[] args) {

        FileWriter fw = null;

        try {

            fw = new FileWriter("D:\\2015SE\\IOStudy\\demo2.txt");

            fw.write("shdckshc");

        } catch (IOException e) {

            e.printStackTrace();

        } finally {

            try {

                if(fw != null) //注意:先判断再关

                    fw.close();

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

}

 

(四)FileReaderread方法当读到文件末尾时返回-1

(五)字符流的缓冲区:要结合流才可使用,在流的基础上对流的功能进行了增强。对应类:BufferedWriter,BufferedReaderreaderLine方法只返回回车符之前的内容,不返回回车符;所以输出时可调用BufferedWriternewLine方法)。   readLine原理:最终使用的还是read方法一次读一个,以 \r\n为行尾标记,读一行储存在缓冲里。

(六)装饰设计模式:当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能增强。例如自定义一个MyBufferedReader,增强read方法。

package cn.cx.io.file;

import java.io.FileReader;

import java.io.IOException;

publicclass MyBufferedReader {

    private FileReader r;

    public MyBufferedReader(FileReader r) {

        super();

        this.r = r;

    }

    public String myReadLine() throws IOException {

        StringBuilder sb = new StringBuilder();

        int ch = 0;

        while((ch=r.read())!=-1) {

            if(ch=='\r')

                continue;

            if(ch=='\n')

                return sb.toString();

            else

                sb.append((char)ch);

        }

        returnnull;

    }

    publicvoid close() throws IOException {

        r.close();

    }

(七)关于InputStream类中read方法返回int不返回byte的原因:因为在非字符数据中数据的开头很有可能是11111111-1)开头的,为避免-1(结束标记)的出现,可以返回int型(byte自动类型提升为int1111-1111-1111-1111-1111-1111-1111-1111)),再&2550000-0000-0000-0000-0000-0000-1111-1111)就可以保证原数据的有效数据不变并避免-1

(八)转换流(可查码表):字节流---->字符流InputStreamReader 。字符流---->字节流OutputStreamWriter

(九)流操作的基本规律:A.明确源和目的,源:输入流(InputStream Reader )目的:输出流(OutputStream Writer    B.操作数据是否为纯文本。是(字符流)

C.明确使用哪个具体的对象。通过设备区分:源设备:内存,硬盘,键盘。目的设备:内存,硬盘,控制台。如还需提高效率,找Buffered

(十)PropertiesHashTable的子类,具备map集合特点。是集合中和IO技术先结合的集合容器。

(十一)ObjectInputStreamObjectOutputStream:被操作对象需要实现Serializable接口

(十二)管道流:PipedInputStreamPipedOutputStream。结合线程使用

 

 

 

 

 

 

你可能感兴趣的:(Java学习笔记)