java笔记22 IO流1(字符流及缓冲区)

来源:互联网 发布:2015年度十大网络剧 编辑:程序博客网 时间:2024/04/30 15:39

1.  IO流

1.1 IO流用来处理设备之间的数据传输。Java对数据的操作是通过流的方式。Java用于操作流的对象都在IO包中。

1.2 输入流和输出流相对于内存设备而言。

将外设中的数据读取到内存中:输入。
    将内存的数写入到外设中:输出。

1.3 流按操作数据分为两种:字节流与字符流。
    字符流的由来:
    其实就是:字节流读取文字字节数据后,不直接操作而是先查指定的编码表,获取对应的文字。再对这个文字进行操作。简单说:字节流+编码表。

2.  IO流常用基类

字节流的抽象基类:InputStream,OutputStream。

字符流的抽象基类:Reader,Writer。
                P.S.
                由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。
                 如:InputStream的子类FileInputStream。
                 如:Reader的子类FileReader。

3.       字符流的操作

数据最常见的体现形式是:文件

import java.io.*;

public class H_06IOStream {

    public static void main(String[] argsthrows Exception{

        // 创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件

        //该文件会被创建在指定目录下,如果已有,会被覆盖。

        FileWriter fw=new FileWriter("demo.txt");

        //调用write方法   将字符串写到流中

        fw.write("hello java");

        //刷新流对象中的缓冲数据,将流刷新到目的地

        fw.flush();

        //fw.close() 关闭流资源,在关闭前会刷新一次。

        fw.close();

    }

}


4.       IO流的异常处理

IO流的异常处理方式:为防止代码异常导致流无法关闭,因此在finally中对流进行关闭。

 

5.       Writer的续写

import java.io.*;

public class H_09WriterContinue {

    public static void main(String[] args) {

        // 传递一个true参数,代表不覆盖文件,并在已有的末尾进行数据续写

        FileWriter fw=null;

        try

        {

            fw=new FileWriter("demo.txt",true);

            fw.write("\r\n xiexie");//因为是用windows的底层方法,所以要用\r\n

            fw.flush();

        } catch (IOException e) {

            e.printStackTrace();

        }

        finally

        {

            try

            {

                if(fw!=null)//一定要判断,如果有多个,要分别判断并关闭

                    fw.close();

            } catch (IOException e)

            {

                e.printStackTrace();

            }

        }

    }

}


 

6.       文件读取的第一种方式

使用read()方法,一次读一个字符

import java.io.*;

public class H_10ReaderDemo {

    public static void main(String[] argsthrows IOException {

        //创建一个文件读取流对象,和指定名称的文件相关联

        //要保证该文件是已经存在的,如果不存在会发生FileNotFoundException

        FileReader fr=null;

        int ch=0;      

        fr=new FileReader("demo.txt");     

        //read():一次读一个字符,而且会自动往下读

        // 如果返回不是-1,则可以循环

 

        while((ch=fr.read())!=-1)//ch=fr.read();判断ch!=-1

        {

            System.out.print((char)ch);

        }

        fr.close();    

    }

}


7.       文件读取的第二种方式

使用read(char[])方法,

import java.io.*;

public class H_11IOReaderDemo2 {

    public static void main(String[] argsthrows IOException {

        FileReader fr=new FileReader("demo.txt");

        // 定义一个字符串数组,用于存储读到的字符

        //read(char[]) 返回的是读到的字符个数

        char[] buf=new char[1024];//通常定义成1024的整数倍     

       

        int len=0;

        while((len=fr.read(buf))!=-1)

        {

            System.out.println(new String(buf,0,len));//转换成字符串

        }

        fr.close();    

    }

}


8.       文件的复制练习(两种方式)

 

9.       字符流缓冲区

BufferedWriter

BufferedReader

        缓冲区是为了提高流的操作效率而出现的

        所以在创建缓冲区之前,必须要现有流对象。

BufferedWriter特有方法

                 跨平台的换行符.newline();

BufferedReader的特有方法

                   一次读一行的方法readline,方便于对文本数据的获取。当返回null时,表示读到文件末尾

         演示添加了缓冲区的复制程序

import java.io.*;

public class H_03BufferedCopy {

    public static void main(String[] args) {

        BufferedReader bufr=null;

        BufferedWriter bufw=null;

        try

        {

            bufr=new BufferedReader(new FileReader("H05_10ThisDemo.java"));

            bufw=new BufferedWriter(new FileWriter("copy.txt"));

            String line=null;

            while((line=bufr.readLine())!=null)//bufr的特有方法,判断是否返回空

            {

                bufw.write(line);//line不会返回回车符等终止符

                bufw.newLine();//bufw的特有方法,加入换行

                bufw.flush();

            }

        }

        catch(IOException e)

        {

            throw new RuntimeException("读写失败");

        }

        finally

        {

            try

            {

                if(bufr!=null)

                    bufr.close();

            }

            catch(IOException e)

            {

                throw new RuntimeException("读写失败");

            }

            try

            {

                if(bufw!=null)

                    bufw.close();

            }

            catch(IOException e)

            {

                throw new RuntimeException("读写失败");

            }          

        }

    }

}


10.   读取行号LineNumberReader

import java.io.*;

public class H_09LineNumberReader {

    public static void main(String[] argsthrows IOException {

        FileReader fr=new FileReader("Demo.txt");

        LineNumberReader lnr=new LineNumberReader(fr);

        String line=null;//功能相同,增加了行号显示

        while((line=lnr.readLine())!=null)

        {

            System.out.println(lnr.getLineNumber()+line);

        }      

        lnr.close();

    }

}


 

 

0 0
原创粉丝点击