Java学习笔记26

Java笔记26

字符编码

  • 常见的字符编码:
编码方式说明
SO-8859-1收录除ASCII外,还包括西欧、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号
UTF-8针对Unicode码表的可变长度字符编码
GB2312简体中文
GBK简体中文、扩充
BIG5台湾,繁体中文
  • 当编码方式和解码方式不一致时,会出现乱码。

字符流

  • 字符流的父类(抽象类):
    • Reader:字符输入流
    • Writer:字符输出流

文件字符流

FileReader
  • 常用方法:
public int read()  //读取一个字符
public int read(char[] cbuf)  //从流中读取多个字符,将读到内容存入字符数组cbuf(缓冲区)中,返回实际读到的字符数;如果达到文件的尾部,则返回-1
public int read(char[] cbuf, int offset, int length)  //将最多length个字符的数据从此输入流读入字符数组cbuf(缓冲区)中。 
//参数:cbuf - 目的缓冲区;   off - 目标数组cbuf的起始偏移量;   length - 要读取的最大字符数;
  • 练习:FileReader的使用:
  • 首先,我们在d:\\JavaTest\\目录下创建一个文本文件hello.txt

在这里插入图片描述

  • 然后,我们往刚才创建的文本文件hello.txt中添加一段字符串数据:

在这里插入图片描述

  • 接着,我们来尝试使用FileReader提供的方法读取我们刚才添加的数据:
package com.clown.io;

import java.io.FileReader;

/*
FileReader的使用:
文件字符输入流
 */
public class FileReaderDemo01 {

    public static void main(String[] args) throws Exception {

        //1. 创建文件字符输入流(FileReader),并指定文件路径
        FileReader fr = new FileReader("d:\\JavaTest\\hello.txt");

        //2. 读取文件

        /*
        //2.1 一次读取单个字符
        int data = 0;

        //read();  读取一个字符;如果达到文件的尾部,则返回 -1
        while ((data = fr.read()) != -1) {
            System.out.print((char) data);
        }
         */

        //2.2 一次读取多个字符
        //创建缓冲区
        char[] buf = new char[1024];  //创建一个字符缓冲区,大小为 1024个字符
        int count = 0;

        //read(char[] cbuf);  从流中读取多个字符,将读到内容存入字符数组 cbuf(缓冲区)中,返回实际读到的字符数;如果达到文件的尾部,则返回 -1
        while ((count = fr.read(buf)) != -1) {
            System.out.println(new String(buf, 0, count));
        }

        //3. 关闭
        fr.close();

    }

}

运行结果:

在这里插入图片描述

FileWriter
  • 常用方法:
public void write(int c)  //写入一个字符
public void write(String str)  //一次写入多个字符,将字符串str中的所有字符写入此文件输出流
public void write(String str, int off, int len)  //将指定字符串中的len个字符从偏移量开始写入此文件输出流
//参数:str - 一个字符串;   off - 数据中的起始偏移量;   len - 要写入的字符数量;
  • 练习:FileWriter的使用:
  • 写入十次字符串:"java是世界上最好的编程语言"到文本文件write.txt中:
package com.clown.io;

import java.io.FileWriter;

/*
FileWriter的使用:
文件字符输出流
 */
public class FileWriterDemo01 {

    public static void main(String[] args) throws Exception {

        //1. 创建文件字符输出流(FileWriter),并指定文件路径
        FileWriter fw = new FileWriter("d:\\JavaTest\\write.txt");

        //2. 写入文件
        for (int i = 0; i < 10; i++) {  //写入十次 "java是世界上最好的编程语言"
            //write(String str);  //一次写入多个字符,将字符串str中的所有字符写入此文件输出流
            fw.write("java是世界上最好的编程语言\r\n");
            //flush();  刷新到硬盘
            fw.flush();
        }

        //3. 关闭
        fw.close();
        System.out.println("执行完毕");

    }

}

运行结果:

在这里插入图片描述

查看文件:

在这里插入图片描述

使用文件字符流实现文本文件的复制
  • 使用文件字符流(FileReader & FileWriter)复制在上一个案例中写入的文本文件write.txt,复制的文件命名为write2.txt
package com.clown.io;

import java.io.FileReader;
import java.io.FileWriter;

//使用文件字符流(FileReader & FileWriter)实现文本文件的复制:
//注意:文件字符流只能复制文本文件,不能复制图片或二进制文件!而文件字节流可以复制任意类型的文件!
public class CopyFileDemo02 {

    public static void main(String[] args) throws Exception {

        //1. 创建流
        //创建文件字符输入流(FileReader),并指定文件路径
        FileReader fr = new FileReader("d:\\JavaTest\\write.txt");
        //创建文件字符输出流(FileWriter),并指定文件路径
        FileWriter fw = new FileWriter("d:\\JavaTest\\write2.txt");

        //2. 读取 & 写入
        //读取文件
        int data =0;

        while ((data = fr.read()) != -1) {
            //写入文件
            fw.write(data);
            //刷新
            fw.flush();
        }

        //3. 关闭
        fr.close();
        fw.close();
        System.out.println("复制完毕");

    }

}

运行结果:

在这里插入图片描述

查看文件:

在这里插入图片描述

查看文件内容:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值