字符流

本文介绍了Java中字符流的基本概念和常用操作,包括FileReader、FileWriter、BufferedReader、BufferedWriter等类的使用方法,并展示了如何利用这些类进行文件的读写及复制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字符编码

  1. ISO-8859-1 收录除ASCII外,还包括西欧、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号。
  2. UTF-8 针对Unicode码表的可变长度字符编码
  3. GB2312 简体中文
  4. GBK 简体中文、扩充
  5. BIG5 台湾、繁体中文

字符流

  • 字符流的父类(抽象类):
    1. Reader:字符输入流
      • public int read(){}
      • public int read(char[] c){}
      • public int read(char[] b,int off,int len){}
    2. Writer:字符输出流
      • public void write(int n){}
      • public void write(String str){}
      • public void write(char[] c){}

文件字符流

  • FileReader:
    • public int read(char[] c)//从流中读取多个字符,将读到的内容存入c数组,返回实际读到的字符数;如果达到文件的尾部,则返回-1。
  • FileWriter:
    • public void write(String str)//一次写多个字符,将b数组中所有字符,写入输出流。

FileReader

import java.io.FileReader;

/**
 *FileReader读取文件
 */

public class Demo09 {
    public static void main(String[] args) throws Exception {
        //1.创建FileReader  文件字符输入流
        FileReader fr = new FileReader("d:\\hello.txt");
        //2.读取
        //2.1单个字符读取
/*        int data =0;
        while((data=fr.read())!=-1){
            System.out.print((char)data);
        }*/
        //2.2多个字符的读取
        char[] buf = new char[2];
        int count =0;
        while((count=fr.read(buf))!=-1){
            System.out.println(new String(buf,0,count));
        }
        //3.关闭
        fr.close();
    }
}

FileWriter

import java.io.FileWriter;

/**
 * 使用FileWriter写入文件
 */

public class Demo10 {
    public static void main(String[] args) throws Exception{
     //1.创建FileWriter对象
        FileWriter fw = new FileWriter("d:\\write.txt");
     //2.写入
        for (int i = 0; i <10 ; i++) {
            fw.write("java是世界上最好的语言\r\n");
            fw.flush();
        }
     //3.关闭
     fw.close();
        System.out.println("执行完毕");
    }
}

使用FileReader和FileWriter复制文本文件

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

/**
 * 使用FileReader和FileWriter复制文本文件,不能复制图片和二进制文件
 * 使用字节流复制任意文件
 */
public class Demo11 {
    public static void main(String[] args) throws Exception{
    //1.创建FileReader  FileWriter
        FileReader fr = new FileReader("d:\\write.txt");
        FileWriter fw = new FileWriter("d:\\write2.txt");
        //2.读写
        int data = 0;
        while((data=fr.read())!=-1){
            fw.write(data);
            fw.flush();
        }
        //3.关闭
        fr.close();
        fw.close();
        System.out.println("执行完毕");
    }
}

字符缓冲流

  • 缓冲流:BufferedReader/BufferedWriter
    • 高效读写
    • 支持输入换行符
    • 可一次写一行、读一行

BufferedReader

import java.io.BufferedReader;
import java.io.FileReader;

/**
 * 使用字符缓冲流读取文件
 */
public class Demo12 {
    public static void main(String[] args) throws Exception{
        //1.创建缓冲流
        FileReader fr = new FileReader("d:\\write.txt");
        BufferedReader br = new BufferedReader(fr);
        //2.读取
        //2.1第一种方式
/*        char[] buf = new char[1024];
        int count = 0;
        while((count=br.read(buf))!=-1){
            System.out.println(new String(buf,0,count));
        }*/
        //2.2第二种方式,一行一行的读取
        System.out.println("=========================");
        String line = null;
        while((line=br.readLine())!=null) {
            System.out.println(line);
        }
        //3.关闭
        br.close();
    }
}

BufferedWriter

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

/**
 * 演示BufferedWriter的使用
 */
public class Demo13 {
    public static void main(String[] args) throws Exception{
        //1.创建BufferedWriter对象
        FileWriter fw = new FileWriter("d:\\buffer.txt");
        BufferedWriter bw = new BufferedWriter(fw);
        //2.写入
        for (int i = 0; i <10 ; i++) {
            bw.write("好好学习,天天向上");
            bw.newLine();//写入换行符
            bw.flush();
        }
        //3.关闭
        bw.close();
        System.out.println("执行完毕");
    }
}

打印流

  • PrintWriter
    • 封装了print()/println()方法,支持写入后换行
    • 支持数据原样打印
import java.io.PrintWriter;

/**
 * 演示PrintWriter的使用
 */
public class Demo14 {
    public static void main(String[] args) throws Exception{
        //1.创建打印流
        PrintWriter pw = new PrintWriter("d:\\print.txt");
        //2.打印
        pw.println(97);
        pw.println(true);
        pw.println(3.14);
        pw.println('a');
        //3.关闭
        pw.close();
        System.out.println("执行完毕");
    }
}

桥转换流

  • 桥转换流:InputStreamReader/OutputStreamWriter
    • 可将字节流转换为字符流
    • 可设置字符的编码格式

InputStreamReader

import java.io.FileInputStream;
import java.io.InputStreamReader;

/**
 * 使用InputStreamReader读取文件,指定使用的编码
 */
public class Demo15 {
    public static void main(String[] args) throws Exception{
        //1.创建InputStreamReader对象
        FileInputStream fis = new FileInputStream("d:\\write.txt");
        InputStreamReader isr = new InputStreamReader(fis,"utf-8");
        //2.读取文件
        int data =0;
        while((data=isr.read())!=-1){
            System.out.print((char)data);
        }
        //3.关闭
        isr.close();
    }
}

OutputStreamWriter

import java.io.FileOutputStream;
import java.io.OutputStreamWriter;

/**
 * 使用OutputStreamWriter写入文件,使用指定的编码
 */
public class Demo16 {
    public static void main(String[] args) throws Exception{
        //1.创建OutputStreamWriter
        FileOutputStream fos = new FileOutputStream("d:\\info.txt");
        OutputStreamWriter osw = new OutputStreamWriter(fos,"gbk");
        //2.写入
        for (int i = 0; i <10 ; i++) {
            osw.write("我爱西安");
            osw.flush();
        }
        //3.关闭
        osw.close();
        System.out.println("执行完毕");
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值