字符流Reader和Writer(三)上

简介: 字符流Reader和Writer(三)

一. Writer


输出字符流,主要用于操作字符, 往文件里面写入字符。常常用其子类 FileWriter


一.一 Writer 接口方法


image.png


String 类实现了 CharSequence 接口。


一.二 FileWriter 子类


一.二.一 构造方法


一.二.一.一 方法


image.png


也是有 传入文件 和传入文件路径两种形式。 通常采用传入 文件的形式。 如果文件不存在,也同样会创建的。


一.二.一.二 演示


 @Test
    public void conTest() throws Exception{
        File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"wz.txt");
        //传入文件
        Writer writer1=new FileWriter(file);
        String path="E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"wz.txt";
        //传入文件路径
        Writer writer2=new FileWriter(path);
    }


一.二.二 写入和关闭等方法


重写父类的方法, 主要是 write(),append() 方法。


20200617122219276.png


一.三 FileWriter 写入文件


一.三.一 write() 写入


老蝴蝶综合简化一下, 包括以前的写入单个,写入数组,换行,写入中文。


   @Test
    public void write1Test() throws  Exception{
        File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"wz.txt");
        Writer writer=new FileWriter(file,true);
        //写入单个,会转换成字符,并不是数字。
        writer.write(65);
        //写入字符数组
        char[] chars="Hello,My Name is TwoButterfly".toCharArray();
        writer.write(chars);
        //写入字符数组的部分形式
        // writer.write(chars,0,3)
        //直接写入字符串
        writer.write("\r\n");
        writer.write("Hello,My Name is TwoButterfly");
        //写入字符串的部分形式
        //writer.write("Hello ",0,5);
        //换行
        writer.write("换行\r\n");
        //写入中文
        writer.write("新的一行");
        writer.close();
    }


运行程序,打开文件系统:


2020061712223867.png


一.三.二 append() 链式写入


    @Test
    public void appendTest() throws  Exception{
        File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"wz.txt");
        Writer writer=new FileWriter(file,true);
        writer.append("\r\n");
        String str="我是追加写入的字符串";
        //链式写入
        writer.append(str).append("\r\n").append(str,0,3);
        writer.close();
    }


运行程序,查看 wz.txt 文件内容


20200617122245907.png


为了保持写入文件一致,通常采用 write()的形式。


二. Reader


Reader 用于读取文件,字符方式读取。 故一般只读取文本格式的文件,不用于读取图片,视频等格式文件。


二.一 Reader 接口方法


image.png


二.二 FileReader 类


二.二.一 构造方法


二.二.一.一 方法


image.png


建议传入文件。


二.二.一.二 演示


  //构造
    @Test
    public void conTest() throws Exception{
        File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"wz.txt");
        //传入文件
        Reader reader=new FileReader(file);
        String path="E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"wz.txt";
        //传入路径
        Reader reader1=new FileReader(path);
    }


二.二.二 读取和关闭方法


主要是实现 接口 Reader 里面的 read() 方法


20200617122323738.png


二.三 Reader 读取文件内容


二.三.一 write() 读取单个字符和读取字符数组


 @Test
    public void readTest() throws Exception{
        File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"wz.txt");
        Reader reader=new FileReader(file);
        int c=reader.read();
        System.out.println("读取单个:"+(char)c);
       char[] chars=new char[1024];
       //读取多个到字符数组
       int len= reader.read(chars);
        System.out.println("输出内容:"+new String(chars,0,len));
    reader.close();
    }


控制台打印输出:


20200617122357394.png


发现,是没有乱码的。


二.三.二 循环读取


@Test
    public void read2Test() throws Exception{
        File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"wz.txt");
        Reader reader=new FileReader(file);
        StringBuilder sb=new StringBuilder();
        char[] chars=new char[1024];
        int len=-1;
        while((len= reader.read(chars))!=-1){
          String temp= new String(chars,0,len);
          sb.append(temp);
        }
        //读取多个到字符数组
        System.out.println("输出内容:"+sb.toString());
        reader.close();
    }


运行程序,控制台打印输出:


2020061712240810.png


字符方式读取,是不会存在中文乱码问题的。

相关文章
|
4月前
|
存储 Java
使用OutputStreamWriter写入数据
使用OutputStreamWriter写入数据
|
5月前
|
存储 设计模式 Java
Java IO流大揭秘:如何高效使用InputStream/OutputStream和Reader/Writer?
【6月更文挑战第26天】Java IO流核心基础,涉及InputStream/OutputStream(字节流)和Reader/Writer(字符流)。高效使用的关键包括:使用Buffered流提升性能,如BufferedInputStream和BufferedOutputStream;处理编码,通过InputStreamReader和OutputStreamWriter指定如UTF-8编码;应用装饰器模式,如DataOutputStream增强功能。理解并巧妙运用这些技巧能优化数据读写操作。
95 0
File操作-InputStreamReader/Writer(转换器)
File操作-InputStreamReader/Writer(转换器)
55 1
File操作-FileReader(FileWriter)/BufferedReader(Writer)
File操作-FileReader(FileWriter)/BufferedReader(Writer)
53 0
|
存储 编解码 缓存
InputStream、OutputStream、Reader、Writer的基本概念和使用方法
InputStream、OutputStream、Reader、Writer的基本概念和使用方法
134 0
|
存储 缓存 Java
【Java I/O 流】字符输入输出流:Reader 和 Writer
前面我们已经学会了字节流的使用,本篇开始介绍字符流。字符输入输出流是所有字符流的超类,学会了它们的方法,也基本上掌握了其子类的使用了。
126 0
|
Java 程序员
JAVA:文本文件读写使用Reader/Writer,二进制文件使用InputStream/OutputStream
JAVA:文本文件读写使用Reader/Writer,二进制文件使用InputStream/OutputStream
84 0
|
缓存 Java
Java学习路线-26:字节流与字符流OutputStream/InputStream/Writer/Reader
Java学习路线-26:字节流与字符流OutputStream/InputStream/Writer/Reader
151 0
|
存储 Java
【J2SE快速进阶】——IO流的四个基本抽象类InputStream、OutputStream、Reader、Writer
上文中对java.io包中的四个抽象类及其关系简单了解了一下,这里进一步对它们及其子类进一步总结一下。 在上篇博客末尾,贴出了Java中的整个IO家族,之后小编又重修改了一下,在之前的基础上,标识出了节点流与处理流(绿色为节点流,黄色为处理流)。
【J2SE快速进阶】——IO流的四个基本抽象类InputStream、OutputStream、Reader、Writer
|
存储 缓存 Java
输入流--outputStream
输入流--outputStream