Java基础案例教程 第七章IO(输入输出) ———7.2 字符流

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

一、字符流定义及基本用法

InputStream和OutputStream类在读写文件时的操作都是字节

Reader和Writer是作为字符流的顶级父类,也有许多子类

 

 

二、字符流操作文件

1、从文件中读数据

package cn.itcast.chapter07.example07;

import java.io.FileReader;

/**
 * 使用字符输入流FileReader读取文件中字符
 */
public class Example07 {
    public static void main(String[] args) throws Exception {
        // 创建一个FileReader对象用来读取文件中的字符
        FileReader reader = new FileReader("D:\\IDEA-file\\reader.txt");
        int ch; // 定义一个变量用于记录读取的字符
        while ((ch = reader.read()) != -1) { // 循环判断是否读取到文件的末尾
            System.out.println((char) ch); // 不是字符流末尾就转为字符打印
        }
        reader.close(); // 关闭文件读取流,释放资源
    }
}


输出
i
t
c
a
s
t

2、向文件中写数据

package cn.itcast.chapter07.example08;
import java.io.*;
/**
 * 使用FileWriter将字符写入文件
 */
public class Example08 {
	public static void main(String[] args) throws Exception {

		// 创建一个FileWriter对象用于向文件中写入数据
                //1、追加式写入
                // FileWriter out=new FileWriter(path,true); 
                //2、覆盖式写入
	      FileWriter writer = new FileWriter("D:\\IDEA-file\\writer.txt");

		String str = "你好,传智播客";
		writer.write(str); // 将字符数据写入到文本文件中
		writer.write("\r\n"); // 将输出语句换行
		writer.close(); // 关闭写入流,释放资源
	}
}

3、通过缓冲流完成文件的复制

使用BufferedReader和BufferedWriter完成文件的复制
BufferedReader中的方法 
    public String readLine() 读一行字符
BufferedWriter中的方法  
    public void newLine() 写入一个换行符

package cn.itcast.chapter07.example09;
import java.io.*;
/**
 * 使用BufferedReader和BufferedWriter完成文件的复制
 *
 * BufferedReader中的方法
 * 		public String readLine() 读一行字符
 *
 * 	BufferedWriter中的方法
 * 		public void newLine() 写入一个换行符
 */
public class Example09 {
	public static void main(String[] args) throws Exception {
		// 创建一个BufferedReader缓冲对象,用于读取文件数据
		BufferedReader in=new BufferedReader(new FileReader("D:\\IDEA-file\\src.txt"));
		// 创建一个BufferedWriter缓冲对象,用于写文件数据
		BufferedWriter out=new BufferedWriter(new FileWriter("D:\\IDEA-file\\des.txt"));

		String line=null;
		// 每次读取一行文本,判断是否到文件末尾
		while ((line = in.readLine()) != null) {
			out.write(line);
			out.newLine(); // 写入一个换行符,该方法会根据不同的操作系统生成相应的换行符
			out.flush();   //也可以不写,在关闭数据流时,会自动刷新
		}
		in.close();
		out.close();
	}
}

三、转换流

  • 前面IO流可以分为字节流和字符流,有时字节流和字符流之间也需要进行转换。在JDK中提供了两个类可以将字节流转换为字符流,分别是InputStreamReader和OutputStreamWriter
  • OutputStreamWriter是Writer的子类,它可以将一个字节输出流转换成字符输出流,方便直接写入字符,
  • InputStreamReader是Reader的子类,它可以将一个字节输入流转换成字符输入流,

package cn.itcast.example10;

import java.io.*;

/**
 * @author wangyue
 * @version 1.0
 * @date 2019/7/3 10:01
 * @describe: 转换流:
 */
public class Example10 {
    public static void main(String[] args) throws IOException {
        //指定输入流
        FileInputStream in = new FileInputStream("D:\\IDEA-file\\src.txt");//创建字节输入流
        InputStreamReader isr = new InputStreamReader(in);  //将字节输入流转换成字符输入流
        BufferedReader br = new BufferedReader(isr);  //高效缓冲流包装

        //指定输出流
        FileOutputStream out = new FileOutputStream("D:\\IDEA-file\\des.txt");//创建字节输出流
        OutputStreamWriter osw = new OutputStreamWriter(out);
        BufferedWriter bw = new BufferedWriter(osw);


        //读数据
        String line = null;
        while ((line = br.readLine()) != null) { //是否读到文件末尾
            //写数据
            bw.write(line);
            bw.newLine();
            bw.flush();
        }

        //关闭流
        br.close();  //只要关闭最后的缓冲流即可
        bw.close();
    }

}

猜你喜欢

转载自blog.csdn.net/wangpailiulanqi8/article/details/94466261