IO---字符流

 字符流概述

        在IO开发过程中,我们传输最频繁的数据为字符,而以字节方式传输字符需要每次将字符串转换成字节再处理,而且也丧失了程序员对数据内容的判断(因为程序员只认识字符,不认识字节)。

        所以,为了让程序员方便对字符进行操作,Java提供了专门以字符作为操作单位的类——字符流,其底层仍然为字节流。

        显然,字符流只能操作字符,无法操作其他数据,如声音、视频等。

    字符输出流

        输出流:

              Writer(抽象类)

              FileWriter(基本字符输出流)

        构造方法:

              public FileWriter(String fileName)       创建覆盖写出对象

              public FileWriter(File file,boolean append) 创建指定是否追加写出对象

        其他方法:

              write(int n):输出一个字符(使用int替代了char)

              write(char[] c):输出一个字符数组

              write(char[] c , int off , int len):输出字符数组的一部分

              write(String s):输出一个字符串

              write(String s , int off , int len):输出字符串的一部分

              flush():刷新缓冲区,将内容写出到指定IO资源

              close():由于每个IO流都需要绑定一个IO资源,在使用时,需要回收资源。而字符流输出流在关闭时,会先调用flush方法。 

package com.IO;

import java.io.FileWriter;
import java.io.IOException;

/**
 * @author :Andy
 * @date :Created in 2019/6/16 22:06
 * @description:基本字符输出流
 */
public class WriterDemo {
    public static void main(String[] args) throws IOException {
        //创建流对象
        FileWriter fw = new FileWriter("D:/test.txt");
        //写出数据
        fw.write('a');
        char[] arr = {'我','爱','J','A','V','A',};
        fw.write(arr);
        fw.write(arr,2,4);
        fw.write("我爱Java!");
        //省略刷新,直接用关闭资源刷新
        fw.close();

    }
}
   

字符输入流

        输入流:

              Reader(抽象类)

              FileReader(基本字符输入流)

    构造方法:需要绑定IO资源

              public FileReader(String name)

    其他方法:

              读取时,返回数据时,使用int替代了char

              int read():读取一个字符;

              int read(char[] c):读取一个字符数组;

              close():由于每个IO流都需要绑定一个IO资源,在使用时,需要回收资源。

package com.IO;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
 * @author :Andy
 * @date :Created in 2019/6/16 22:32
 * @description:读取一个字符
 */
public class ReaderDemo {
    public static void main(String[] args) throws IOException {
        //一次读取一个字符
        FileReader fr = new FileReader("D:/test.txt");
        //定义变量,记录每次读取到的字符
        int c=-1;
        while((c=fr.read())!=-1){
            System.out.println((char) c);
        }
        fr.close();
        System.out.println("===========================");
        //一次读取一个字符数组
        FileReader fr2 = new FileReader("D:/test.txt");
        char[] arr = new char[1024];
        int len = -1;
        while((len=fr2.read(arr))!=-1){
        //字符数组比较特殊,直接打印引用变量,不是打印的地址,而是内容
           System.out.println(arr);
            String s = new String(arr,0,len);
            System.out.println("开始"+s+"1");
        }
        fr2.close();
    }
}

高效字符流基本使用

        Java在常规IO流的基础上,提供了更为高效的缓冲流,如下:

        高效字符流:BufferedReader/BufferedWriter

:    需求:

             利用高效字符流完成以下操作

             1.向当前工程下的test.txt中写入"i miss u,i want u,i with u"

             2.读取当前工程下的test.txt文件中的内容

             3.将读取到的内容打印到控制台上

 package com.IO;

import java.io.*;

/**
 * @author :Andy
 * @date :Created in 2019/6/17 8:29
 * @description:高效字符输出流和输入流
 */
public class BufferedWriterReaderDemo {
    public static void main(String[] args) throws IOException {
        //创建普通流对象
        FileWriter fw = new FileWriter("D:/test.txt");
        //创建高校流对象
        BufferedWriter bw = new BufferedWriter(fw);
        String s = "i miss u,i want u,i with u";
        bw.write(s);
        //刷新数据
        bw.flush();
        //关闭高校流对象
        bw.close();
        //创建普通对象流
        FileReader fr = new FileReader("D:/test.txt");
        //创建高校对象流
        BufferedReader br = new BufferedReader(fr);
       char[] chars = new char[1024];
       int len = br.read(chars);
       String result = new String(chars,0,len);
       System.out.println(result);
        br.close();
    }

}

高效字符输出流的特殊方法

            void newLine(): 根据当前的系统,写入一个换行符,

            在windows系统下调用该方法,写入的是\r\n

            在mac系统下调用该方法写入的是\r

            在linux系统下调用该方法写入的是\n

package com.IO;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

/**
 * @author :Andy
 * @date :Created in 2019/6/17 19:41
 * @description:高效字符输出流的特殊方法
 */
public class BufferedWriterReaderDemo2 {
    public static void main(String[] args) throws IOException {
        //创建普通流对象
        FileWriter fw = new FileWriter("D:/test.txt");
        //创建高效流对象
        BufferedWriter bw = new BufferedWriter(fw);
        //写
        bw.write("i miss u,i want u,she with u");
        //换行时,每种环境对换行的识别不同,Windows识别\r\n,有的识别\r有的识别\n
        //bw.write("\n");
        //调用高校流的换行方法
        bw.write("i miss u,i want u,she with u");
        bw.newLine();

        bw.write("i miss u,i want u,she with u");
        bw.newLine();
        bw.flush();
        bw.close();
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值