8.6JavaI/O流之Reader和Writer

本文探讨了Java中的字符流Reader和Writer。Reader作为字符输入流,以char为单位,提供了多种读取字符的方法,如FileReader、CharArrayReader等。它需要指定编码模式,并且使用时需要注意资源释放。Writer则是字符输出流,包括FileWriter、CharArrayWriter等,支持写入单个字符、字符数组或字符串。

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

Reader

Reader和InputStream是同一个性质,InputStream是一个字节流,以byte为单位,而Reader是字符流,以char为单位。读取字符的方法也是int read(char[] c);
需要注意的是Reader由于是字符流,因此可读性较高,需要更高的编码模式,在创建时需注明。
FileReader
FileReader是Reader的一个子类,它可以打开文件获取Reader。

public static void main(String[] args) throws IOException {
		try(Reader reader = new FileReader("1.txt",StandardCharsets.UTF_8)){
			int n;
			while((n = reader.read())!=-1) {
				System.out.print((char)n);
			}
		}
	}

与InputStream类似,Reader也需要即使释放资源。因此使用try,用read()方法读取字节,传给int n,强转为char类型。

public static void main(String[] args) throws IOException {
		try(Reader reader = new FileReader("1.txt",StandardCharsets.UTF_8)){
			char[] c = new char[1000];
			while(reader.read(c)!=-1) {
				System.out.println(c);
			}
		}
	}

与InputStream类似,Reader也需要即使释放资源。用缓冲区,创建char[]数组,缓冲区最大不超过char[]数组的长度,每次填充缓冲区。
CharArrayReader
内存中模拟一个Reader,实际将char[]数组变成一个Reader:

try (Reader reader = new CharArrayReader("Hello".toCharArray())) {
}

StringReader:与CharArrayReader一样:

try (Reader reader = new StringReader("Hello")) {
}

InputStreamReader:
实际上InputSteamReader是一个InputStream转换为Reade之间的转换器,Reader实际上是基于InputStream构造的,只是在内部将字节转化为字符型。

// 持有InputStream:
InputStream input = new FileInputStream("src/readme.txt");
// 变换为Reader:
Reader reader = new InputStreamReader(input, "UTF-8");

try (Reader reader = new InputStreamReader(new FileInputStream("src/readme.txt"), "UTF-8")) {
    // TODO:
}

Writer

与Reader相似,Writer也是字符流,以char为单位,可供写入的方法有:

  • 写入一个字符(0~65535):void write(int c);
  • 写入字符数组的所有字符:void write(char[] c);
  • 写入String表示的所有字符:void write(String s)。

FileWriter

private static void writeFile(String filePath,String str)throws IOException {
		// TODO Auto-generated method stub
		try(Writer writer = new FileWriter(filePath,StandardCharsets.UTF_8)){
			writer.write(str);
		}
	}	

CharArrayWriter和StringWriter
与CharArrayReader相同

try (CharArrayWriter writer = new CharArrayWriter()) {
    writer.write(65);
    writer.write(66);
    writer.write(67);
    char[] data = writer.toCharArray(); // { 'A', 'B', 'C' }
}

OutputStreamWriter
与OutputStreamReader相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值