Java IO(IO流)-2

IO流 第一部分 (OutputStreamWriter BufferOutputStream)

转换流

超类为Reader和Writer

是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节。它的作用的就是,将字符串按照指定的编码表转成字节,在使用字节流将这些字节写出去。

先将字符交给转换流,然后转换流去查询指定的编码表,然后将查询后的对应编码表中的内容返回给对应的字节流,然后字节流进行对应的操作

OutputStreamWriter

构造方法

  • OutputStreamWriter(OuputStream out) // 传递进来一个OuputStream(多态)
  • OutputStreamWriter(OutputStream out, String charsetName) String charsetName 传递编码表名字 GBK UTF-8

使用

                            FileOutputStream fos = new FileOutputStream("c:\\utf.txt");
                        //创建转换流对象,构造方法保证字节输出流,并指定编码表是UTF-8
                        OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
                        osw.write("你好");
                        osw.close();

InputSteamReader(字节流向字符)

先将通过InputStream类读取字符,然后给InputSteamReader , InputSteamReader 查询编码表然后转换成字符输出

构造方法

  • InputSteamReader(InputStream out)
  • InputSteamReader(InputStream out,String charsetName)

使用

            InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("d://deo2.txt"));
            char[] b = new char[2];
            
            int len = 0;
            
            while((len = inputStreamReader.read(b))!=-1){
                System.out.println(new String(b,0,len));
            }
            inputStreamReader .close();

输出流的子类

子类可以直接操作文件,但是不能指定编码格式,默认使用系统默认的格式

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

缓冲流

  • 提高输入输出的效率
  • 分为字节缓冲流与字符缓冲流

BufferedOutputStream(字节输出流缓冲流)

构造方法

  • BufferedOutputStream(OutputStream out)

使用

                    //创建字节输出流缓冲流的对象,构造方法中,传递字节输出流
                    BufferedOutputStream bos = new
                            BufferedOutputStream(new FileOutputStream("c:\\buffer.txt"));
                    
                    bos.write(55);
                    
                    byte[] bytes = "HelloWorld".getBytes();
                    
                    bos.write(bytes);
                    
                    bos.write(bytes, 3, 2);
                    
                    bos.close();

BufferedInputStream (字节输入流缓冲流)

构造方法

  • BufferedInputStream(InputStream in)
                    //创建字节输入流的缓冲流对象,构造方法中包装字节输入流,包装文件
                    BufferedInputStream bis = new 
                            BufferedInputStream(new FileInputStream("c:\\buffer.txt"));
                    byte[] bytes = new byte[10];
                    int len = 0 ;
                    while((len = bis.read(bytes))!=-1){
                        System.out.print(new String(bytes,0,len));
                    }
                    bis.close();

BufferedWriter(字符输出流缓冲流)

构造方法

  • BufferedWriter(Writer w)

BufferedWriter具有一个特殊的方法 newLine() 作用为换行 (平台无关性)

                    FileWriter fw = new FileWriter("c:\\buffer.txt");
                    BufferedWriter bfw = new BufferedWriter(fw);
                    
                    bfw.write(100);
                                        bfw.newLine();
                    bfw.flush();

BufferedReader

构造方法

BufferedReader(Reader r)

有独特的方法 readLine() 读取一行 , 只返回行的有效字符,不包含\r\n (即读出来的数据是一行)

                        int lineNumber = 0;
                    //创建字符输入流缓冲流对象,构造方法传递字符输入流,包装数据源文件
                    BufferedReader bfr = new BufferedReader(new FileReader("c:\\a.txt"));
                    //调用缓冲流的方法 readLine()读取文本行
                    //循环读取文本行, 结束条件 readLine()返回null
                    String line = null;
                    while((line = bfr.readLine())!=null){
                        lineNumber++;
                        System.out.println(lineNumber+"  "+line);
                    }
                    bfr.close();

通过字符流缓冲区流复制文本文件

                    BufferedReader bfr = new BufferedReader(new FileReader("c:\\w.log"));   
                    BufferedWriter bfw = new BufferedWriter(new FileWriter("d:\\w.log"));
                    //读取文本行, 读一行,写一行,写换行
                    String line = null;
                    while((line = bfr.readLine())!=null){
                        bfw.write(line);
                        bfw.newLine();
                        bfw.flush();
                    }
                    bfw.close();
                    bfr.close();

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏calmound

程序面试题

1已知strcpy函数的原型是 char *strcpy(char *strDest, const char *strSrc); 其中strDest是目的字符串...

2666
来自专栏菩提树下的杨过

linq to sql中慎用Where<T>(Func<TSource, bool> predicate),小心被Linq给"骗"了!

近日在一个大型Web项目中,采用Linq to Sql替换原来的sqlcommand/sqldatareader方式来获取数据,上线后刚开始一切正常,但是随着访...

1785
来自专栏python学习之旅

Python笔记(二):列表+列表数据处理+函数

#才疏学浅,难免有不恰当之处,请不吝指正,谢谢。 #适合初学者。     列表的数据自下而上堆放(形成一个堆栈),类似于其他编程语言的数组。例如: user =...

2825
来自专栏java架构师

Android一 流

补充Java知识:流 java.io 四个抽象类: 字节流:InputStream OutputStream 字符流:Reader Writer 站在程序角度上...

33411
来自专栏写代码的海盗

脱掉Golang的第一层衣裳 golang入坑系列

海鳖曾欺井内蛙,大鹏张翅绕天涯。强中更有强中手,莫向人前满自夸。 各位看官,现在开始脱衣裳。你不用脱,自个衣裳要穿好了,别脱下来。我们是来学Golang的,不...

2493
来自专栏mukekeheart的iOS之旅

Java基础——IO流

  今天刚刚看完java的io流操作,把主要的脉络看了一遍,不能保证以后使用时都能得心应手,但是最起码用到时知道有这么一个功能可以实现,下面对学习进行一下简单的...

2188
来自专栏大内老A

通过实例模拟ASP.NET MVC的Model绑定的机制:集合+字典

在本系列的前面两篇文章(《简单类型+复杂类型》、《数组》)我们通过创建的实例程序模拟了ASP.NET MVC默认使用的DefaultModelBinder对简单...

2657
来自专栏数据处理

proc-tabulate-report

1364
来自专栏Golang语言社区

golang讲解(go语言)标准库分析之strings结束篇

今天我们完结了这个strings的包,其实我们就剩下了type Reader和type Replacer这个我们之间讲过io的包,这样大家理解起来就比较省劲了!...

3318
来自专栏WindCoder

个人常用语句笔记-Java

JDK1.7的新语法,这种try语句可以自动执行资源关闭过程,无需再在finally中显式关闭流。

631

扫码关注云+社区