SE_字符流

  • 字符流的出现是为了更方便的操作中文,因为字节流每次只能读取一个字节,而中文有多个字节组成,所以会出现的乱码的效果
  • 字符流: 即字节流+码表
  • 字符流和字节流的使用场景:若需拷贝,常使用字节流…若操作纯文本文件,使用字符流
  • 字符流_编码、解码

public class Test06 {
    public static void main(String[] args) throws UnsupportedEncodingException {
        //编码演示
        //创建字符串
        String s = "大吉大利";

        //调用方法getBytes使用默认的编码格式进行编码,返回byte类型数组
        byte[] bytes = s.getBytes();
        //调用Arrays.toString方法传入数组,将数组中内容以字符串形式返回
        System.out.println(Arrays.toString(bytes));
        //[-27, -92, -89, -27, -112, -119, -27, -92, -89, -27, -120, -87]


        String s1 = "今晚吃鸡";

        //使用指定的编码格式进行编码
        byte[] gbks = s1.getBytes("gbk");

        System.out.println(Arrays.toString(gbks));
        //[-67, -15, -51, -19, -77, -44, -68, -90]

        //String类进行解码方式一

        byte[] bytes3 = {-27, -92, -89, -27, -112, -119, -27, -92, -89, -27, -120, -87};

        //  通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
        String s2 = new String(bytes);

        System.out.println(s2);

        //解码方式二
        byte[] bytes1 = {-67, -15, -51, -19, -77, -44, -68, -90};

        String s3 = new String(bytes1,"gbk");
        System.out.println(s3);

    }
}

  • 字符流_输出流

public class Tets07 {
    public static void main(String[] args) throws IOException {
        //字符流

        //创建输出流对象
        FileWriter fileWriter = new FileWriter("D:\\file\\f.txt");

        //调用方法单个输入数据
        fileWriter.write(97);

        //刷新流
        fileWriter.flush();

        //关闭流
        fileWriter.close();



        FileWriter fileWriter1 = new FileWriter("D:\\file\\f.txt");

        //以数组的形式进行输入
        char[] chars = {97,98,99,100};

        fileWriter1.write(chars);

        //刷新流
         fileWriter1.flush();

       //关闭流
         fileWriter1.close();

         //进行换行的意思
         fileWriter1.write("\r\n");


        FileWriter fileWriter2 = new FileWriter("D:\\file\\f.txt");

        char[] chars1 = {97,98,99,100,101};

        fileWriter2.write(chars1,0,2);

        fileWriter2.close();

    }
}

  • 字符流_输入流
public class Test08 {
    public static void main(String[] args) throws IOException {
        //输入流

        //创建输入流对象
        FileReader fileReader = new FileReader("D:\\file\\f.txt");

        //调用方法进行读取,每次读取一个
        int read = fileReader.read();
        System.out.println(read);

        //定义一个char类型的数组进行储存数据
        char[] chars = new char[1024];

        //定义一个变量用于记录读取的值
        int ch;
        

        //进行条件判断
        while ((ch=fileReader.read(chars))!=-1){
            //因为储存的值为char类型,所以要使用String类有参构造转换类型
            //分配一个新的 String,它包含取自字符数组参数一个子数组的字符。
            System.out.println(new String(chars,0,ch));
        }

    }
}

  • 字符缓冲流

public class Test09 {
    public static void main(String[] args) throws IOException {

        //字符缓冲流

        //创建字符缓冲输出流对象
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("D:\\file\\f.txt"));

        //调用方法进行输入
        //newLine方法 字符缓冲输入流特有方法,即代表换行效果
        bufferedWriter.write(97);
        bufferedWriter.newLine();
        bufferedWriter.write(98);
        bufferedWriter.newLine();
        bufferedWriter.write(99);
        bufferedWriter.newLine();

        bufferedWriter.close();


        //创建字符缓冲输入流对象
        BufferedReader bufferedReader = new BufferedReader(new FileReader("D:\\file\\f.txt"));

        //调用方法readLine方法一次读一整行,字符缓冲输入流专用
        String ch;
        while ((ch=bufferedReader.readLine())!=null){
            System.out.println(ch);
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值