常用IO流详解

        闲着无事,想想对IO流还不是很熟悉,于是去翻了一下文档,汲取点养料。

        IO流总的来说分两类:1、字节流   2、字符流

字节流使用的数组是字节数组bytep[] bts

字符流使用的数组是字符数组char[] chs

        字节流:

       抽象基类: InputStream、outputStream

        字节流可以操作任何数据,read()方法读取字节返回int,当读取完成是返回-1,read(byte[] bt)方法吧读取的字节存储进字节数组返回int ,读取完成返回-1,available()获取关联文件的字节数

     FileOuputStream fos=new FileOutPutStream("d:\\demo.txt")

     fos.write("adfasfd"); //写入流

     fos.close();//关闭流

缓冲区:是流的修饰类,应用了修饰模式,更加的灵活好用,增强流的功能

BufferedOutputStream 写入流缓冲区,增强效率,继承outputStream所有方法,构造函数传一个写入流;

     BufferedInputStream 读取流缓冲区,增强效率,继承inputStream所有方法,构造函数用传一个读取流;

例:

BufferedOutputStream bo=new BufferedOutputStream(new FileOutputStream("d:\\tt.txt",true));
        BufferedInputStream fs=new BufferedInputStream(new FileInputStream("d:\\t.txt"));
        System.out.println(fs.available());
        byte[] buf=new byte[fs.available()];
        int len=fs.read(buf);
        bo.write(buf);
        System.out.println(new String(buf,0,len));/**bytes - 要解码为字符的字节 ,offset - 要解码的首字节的索引,length - 要解码的字节数 */
        bo.close();
        fs.close();


字符流

抽象基类:Reader、Writer

   操作纯文本的数据我们可以使用字符流,直接对字符进行操作

与字节流一样 字符流也有缓冲区,想提高效率就用缓冲区,以file开头的类都是操作文件的类,

BufferedWriter 特有方法 newLine()  //跨平台的换行符   ,BufferedReader 特有方法readLine()一次读一行,当读到行标记时,把行标记之前的数据当作字符串返回,当读到末尾时返回null

     BufferedReader bufrd=new BufferedReader(new FileReader("d:\\baa.txt"));
             BufferedWriter bufw=new BufferedWriter(new FileWriter("d:\\demo.txt",true));
             char[] buf=new char[1024];
            String ch=null;
                while((ch=bufrd.readLine())!=null){
                    bufw.write(bufrd.getNumber()+ch);
                    bufw.newLine();
                    bufw.flush();//对缓冲区的数据进行刷新,将数据刷到目的地
                    System.out.println(ch);
                }
                bufw.close();
                bufrd.myClose();

readLine()方法原理:其实用的还是关联流对象的read()方法,只不过每次读到一个字符不对其进行操作,而是存储在临时容器中,当读到回车标记时,一吃性返回容器中存储的数据


转换流:

 InputStreamReader:字节转字符

OutputStreamWriter:字符转字节

他们构造的时候要传入字节流对象、可以指定转换的编码

转换流的使用,缓冲区用来提高效率

String charset="utf-8";
        BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("d:\\demo.txt"),charset));
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d:\\aaa.txt"),charset));
        String ch=null;
        if((ch=br.readLine())!=null){
            bw.write(ch);
        }
        bw.close();
        br.close();


File(String fileName) 将一个字符串路径封装成文件,可以存在可以不存在

separator:跨平台的分割目录符

File file =new File("d:"+File.separator+"abc"+File.separator+"a.txt")//d盘下面的abc文件夹下面的a.txt文件

常用的方法有:mkdir()//创建文件夹

                           mkdirs()//创建多级文件夹

                           delete()//删除,必须从里玩外的删除

                         exists()//判断文件是否存在

                         isFile()//判断File对象中封装的是否是文件

                         isirectory()//判断File对象中封装的是否是目录

                       注意listFiles()获取指定目录下的文件及文件夹对象时底层文件夹下如果没有文件 则返回Null,如果路径包含到最底层文件,返回也为null

打印流:

PrintStream:字节打印流

PrintWriter:字符打印流、对于字符串路径和File对象可以指定编码;对于OutputStream和Writer可以指定自动更新

//指定编码、自动刷新

PrintWrter pw =new PrintWriter(new OutputSteamWriter(new FileOutputStream("a.txt"),"utf-8"),true);

//提高效率、打印

PrintWrter pw =new PrintWriter(new BufferdWriter(new OutputSteamWriter(new FileOutputStream("a.txt"),"utf-8")),true);





你可能感兴趣的:(java)