71-IO 流

JAVA IO 流

一.概括

1.IO(INPUT OUTPUT)流

1.1 IO 流用来处理设备之间的数据传输
1.2JAVA 对数据的操作是通过流的方式
1.3 JAVA 用于操作流的对象都在 IO 包中
1.4 流按操作数据分两种:字节流与字符流

2. IO 流常用基类

2.1 字节流的抽象基类

InputStream, OutputStream

2.2 字符流的抽象基类

Reader, Writer
(注: 由这四个类派生出来的子类名称都是以其父类名作为子类名
如: InputStream 的子类 FileInputStream.
Reader 的子类 FileReader
)

3. 程序书写

3.1 对 IO 异常处理

必须要捕获异常
原因:
1 捕获了异常,报告读取错误,然后由用户处理
2 程序继续读,还读不到,继续读。。。。。直到永远...

3.2在 finally 中对流进行关闭

思考:
有了垃圾回收机制为什么还要调用 close 方法关闭
答:Java有垃圾回收机制就像是我们的清洁工,每天会定时的打扫街道两三次,

但是如果路人不爱清洁;每时每刻都在制造垃圾,,那么我们的街道时时刻刻都是脏的。而清洁工的能力和工作次数是有限的,,在这种情况下就是我们的街道也就是内存会处于高负荷状态。跟没有清洁工没两样了。。

因为java的垃圾回收,用户是没有办法控制的,它会在不确定的时候触发,而且java不保证在整个程序运行期一定会触发垃圾回收,所以对于流、socket等之类的资源用完之后一定要关闭。而且垃圾回收机制对于socket、thread之类的对象即使引用计数为0了,只要还是在活动的情况下,也不会被回收。

二. 字符流(纯文本文件不包括图片)

1.创建文件

public static void testFileWriter(){
        FileWriter fw  = null;
        try {
            fw = new FileWriter("/Users/zzy/Downloads/filewriter.txt");
            fw.write("鲁A08Z72");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fw != null){
                try {
                    fw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

2.读取文件

public static void testFileReader(){
            FileReader fr = null;
            try {
                fr = new FileReader("/Users/zzy/Downloads/项目整合步骤.txt");
                char[] buf = new char[1024];
                int len = 0;

                while ((len = fr.read(buf)) != -1){
                    System.out.println(new String(buf, 0, len ));
                }

            } catch (Exception e) {

                System.out.println("read-exception:" + e.toString());
            } finally {
                if (fr != null){
                    try {
                        fr.close();
                    } catch (IOException e) {

                        System.out.println("close-exception:"+ e.toString());
                    }
                }
            }


    }

3.字符流的缓冲区

BufferedWriter
BufferdReader

三. 字节流(二进制文件,十六进制文件)

public static void readFile_2()throws IOException
    {
        FileInputStream fis = new FileInputStream("fos.txt");

        byte[] buf = new byte[1024];
        int len = 0;
        while((len=fis.read(buf))!=-1)
        {
            System.out.println(new String(buf,0,len));
        }

        fis.close();

    }
public static void writeFile()throws IOException
    {
        FileOutputStream fos = new FileOutputStream("fos.txt");


        fos.write("abcde".getBytes());

        fos.close();


    }

四.字节流转字符流

转换流: InputStreamReader,
OutputStreamWriter

public static void  testTransformer(){
        //获取键盘录入对象。
        //InputStream in = System.in;

        //将字节流对象转成字符流对象,使用转换流。InputStreamReader
        //InputStreamReader isr = new InputStreamReader(in);

        //为了提高效率,将字符串进行缓冲区技术高效操作。使用BufferedReader

        //BufferedReader bufr = new BufferedReader(isr);


        //键盘的最常见写法。
        BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

//		OutputStream out = System.out;
//		OutputStreamWriter osw = new OutputStreamWriter(out);
//		BufferedWriter bufw = new BufferedWriter(osw);
        BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

        String line = null;

        try {
            while((line=bufr.readLine())!=null)
            {
                if("over".equals(line))
                    break;
                bufw.write(line.toUpperCase());
                bufw.newLine();
                bufw.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bufw != null){
                try {
                    bufr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }


    }
posted @ 2016-05-12 09:06  农民阿姨  阅读(223)  评论(0编辑  收藏  举报