Java基础笔记29-字符流


Java基础笔记29-字符流

1.1 字符流介绍
  • 字符流包含两大抽象类: 读取流 Reader, 写入流 Writer
  • Reader
    • 常用实现子类:FileReader
    • 常用方法:read()
  • Writer
    • 常用实现子类:FileWriter
    • 常用方法:writer

代码示例:

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;

public class CharacterStreamDemo {

	public static void main(String[] args) throws IOException {
		readerMethod();
	}
	
	/**
	 * 字符流写功能  Writer 
	 * @throws IOException 
	 */
	public static void writerMethod() throws IOException {
		//创建一个Writer对象
		Writer writer = new FileWriter("E:/WWWW.txt",true);
		//写入数字,对应的也是ASCII值,超出ASCII表的数值显示为?,想写入数字可以将数字转为字符串
		writer.write(97);
		writer.write("197");
		//写入字符串可以直接使用字符串,不用再转换类型
		writer.write("你好");		
		//使用字符流写入时,要求要有刷新流flush()或关闭流close(),流关闭后不能再使用流
		writer.flush();
		writer.close();
	}
	
	/**
	 * 字符流读取功能  Reader
	 * @throws IOException 
	 */
	public static void readerMethod() throws IOException {
		Reader reader = new FileReader("E:/WWWW.txt");	
		//read(char[] c)接收字符数组类型的参数,如果不写参数,则是读取一个字符,返回int型数据
		/*int result =  reader.read();
		System.out.println((char)result);*/
		//使用char[]来读取信息
		char[] chars = new char[1024];
		while(reader.read(chars)!=-1) {
			System.out.println(new String(chars));
		}
		reader.close();
	}
}
1.2 字符流缓冲对象
  • BufferedWriter 字符流缓冲对象 写入流

  • BufferedReader 字符流缓冲对象 读取流

  • 在对字符串及文本进行读取或写入操作时,使用字符流及其缓冲对象,读取时可以避免乱码及空间浪费问题,写入时也更高效。

代码示例:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;

/**
 * BufferedReader   BufferedWriter
 * 字符缓冲流对象
 *
 */
public class BufferedDemo {

	public static void main(String[] args) throws IOException {
		bufferedWriterMethod();
	}
	/**
	 * 使用缓冲流进行写数据操作
	 * @throws IOException 
	 */
	public static void bufferedWriterMethod() throws IOException {
		Writer writer = new FileWriter("E:/buffered.txt");
		BufferedWriter bw = new BufferedWriter(writer);		
		//写入数据
		bw.write("你好");
		bw.write("\r\n");
		bw.write("hello");
		bw.write("97");
		bw.write(97);		
		//关闭流,倒着关闭,后写的先关闭
		bw.close();
		writer.close();
	}
	
	/**
	 * 字符缓冲流 读取方法  BufferedReader
	 * @throws IOException 
	 */
	public static void bufferedReaderMethod() throws IOException {
		Reader reader = new FileReader("E:/buffered.txt");
		BufferedReader br = new BufferedReader(reader);
		//读取单个字符
		//int result = br.read();
		//System.out.println((char)result);
		
		//按字符数组来读
		/*char[] chars = new char[1024];
		while(br.read(chars)!=-1) {
			System.out.println(new String(chars));
		}*/
		
		//按行读取  readline()返回字符串
		//String strLine = br.readLine();
		//System.out.println(strLine);
		
		String strLine = null;
		while((strLine = br.readLine())!=null) {
			System.out.println(strLine);
		}	
		br.close();
		reader.close();	
	}
}
1.3 字符串缓冲对象
  • StringBuilder 线程不安全,效率高,可变变量

  • StringBuffer 线程安全,效率低,可变变量

  • StringBuilder 设计用作简易替换为 StringBuffer 在正在使用由单个线程字符串缓冲区的地方(如通常是这种情况)。 在可能的情况下,建议使用这个类别优先于StringBuffer,因为它在大多数实现中将更快。

代码示例:

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class StrbuMethod {
	public static void main(String[] args) throws IOException {
		readerMethod2();
	}
	/**
	 * 字符读取
	 * 使用字符串缓冲对象  StringBuilder
	 * @throws IOException 
	 */
	public static void readerMethod() throws IOException {
		Reader reader = new FileReader("E:/WWWW.txt");
		//使用字符数组来规定读取数量
		char[] cre = new char[1024];
		//使用字符串缓冲变量StringBuilder来接收字符串
		StringBuilder sb = new StringBuilder();
		//使用循环将读取到的字符串添加到字符串缓冲变量中
		while(reader.read(cre)!=-1) {
			//使用append(char[] c)来将字符数组添加到字符串缓冲变量中
			sb.append(cre);
		}
		//输出字符串缓冲变量
		System.out.println(sb.toString());
		reader.close();
	}
	/**
	 * 字符读取
	 * 使用字符串缓冲对象  StringBuffer
	 * @throws IOException 
	 */
	public static void readerMethod2() throws IOException {
		Reader reader = new FileReader("E:/WWWW.txt");
		//使用字符数组来规定读取数量
		char[] cre = new char[1024];
		//使用字符串缓冲变量StringBuffer来接收字符串
		StringBuffer sb = new StringBuffer();
		//使用循环将读取到的字符串添加到字符串缓冲变量中
		while(reader.read(cre)!=-1) {
			//使用append(char[] c)来将字符数组添加到字符串缓冲变量中
			sb.append(cre);
		}
		//输出字符串缓冲变量
		System.out.println(sb.toString());
		reader.close();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值