Java SE 094 Java字符流详解

(1)一个人只要自己不放弃自己,整个世界也不会放弃你.
(2)天生我才必有大用
(3)不能忍受学习之苦就一定要忍受生活之苦,这是多么痛苦而深刻的领悟.
(4)做难事必有所得
(5)精神乃真正的刀锋
(6)战胜对手有两次,第一次在内心中.
(7)编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~

Java SE 094 Java字符流详解

1.字符流

(1)尽管字节流提供了处理任何类型输入/输出操作的足够的功能,它们不能直接操作Unicode字符。既然Java的一个主要目的是支持“只写一次,到处运行”的哲学,包括直接的字符输入/输出支持是必要的。字符流层次结构的顶层是Reader和Writer抽象类。
(2)之所以出现unicode字符是为了满足世界上多种语言,能表示世界上多种语言的字符。最早用于表示字符的编码是ASCII码,这个编码表示的英文是没问题的,但是表示东亚那些字符,汉语中文、日文,还有韩语都是表达不了的。一个Unicode字符是用两个字节表示的,如果单独的使用字节流的话,使用了unicode进行编码的字符,每次读一个字节,出来之后肯定不能够恢复到一个完整的字符,变成字符的一半了,字符的一半肯定就是乱码了,因此Java给我们提供了操纵字符的相应的功能,可以让我们以更加简单,更加方便的方式来去操纵字符串。

2.字符流Reader和Writer

(1)由于Java采用16位的Unicode字符,因此需要基于字符的输入/输出操作。从Java1.1版开始,加入了专门处理字符流的抽象类Reader和Writer,前者用于处理输入,后者用于处理输出。这两个类类似于InputStream和OutputStream,也只是提供一些处理字符流的规定,本身不能用来生成对象。
(2)Reader和Writer类也有较多的子类,与字节流类似,它们用来创建具体的字符流对象进行I/O操作。字符流的读写方法与字节流的相应方法都很类似,但读写对象使用的是字符。
(3)解说:byte数组换成char数组
(4)Reader中包含一套字符输入流需要的方法,可以完成最基本的从输入流读入数据的功能。当Java程序需要外设的数据时,可根据数据的不同形式,创建一个适当的Reader子类类型的对象来完成与该外设的连接,然后再调用执行这个流类对象的特定输入方法,如read(),来实现对相应外设的输入操作。
(5)Writer中包含一套字符输出流需要的方法,可以完成最基本的从输出数据到输出流的功能。当Java程序需要将数据输出到外设时,可根据数据的不同形式,也要创建一个适当的Writer子类类型的对象来完成与该外设的连接,然后再调用执行这个流类对象的特定输出方法,如write(),来实现对相应外设的输出操作。
(6)Reader是定义Java的流式字符输入模式的抽象类。该类的所有方法在出错情况下都将引发IOException异常。
(7)Writer是定义流式字符输出的抽象类。所有该类的方法都返回一个void值并在出错情况下引发IOException异常。

在这里插入图片描述
在这里插入图片描述

(8)Java程序语言使用Unicode来表示字符串和字符,Unicode使用两个字节来表示一个字符,即一个字符占16位。

3.InputStreamReader和OutputStreamWriter类

(1)这是java.io包中用于处理字符流的基本类,用来在字节流和字符流的基本类之间搭一座“桥”,这里的字节流的编码与具体的平台有关,可以在构造流对象时指定规范,也可以使用当前平台的缺省规范。
在这里插入图片描述
在这里插入图片描述

4.字符流输入与输出

4.1将数据通过字符流写入文件

package com.javareview.io.stream.characterstream;

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

/**
 * 将数据通过字符流写入文件
 * @author xiongjie
 */
public class WriterTest {
	public static void main(String[] args) throws IOException {
		//s1.构建具体构建角色
		FileOutputStream fos = new FileOutputStream("file.txt");
		//s2.构建具体装饰角色1
		OutputStreamWriter osw = new OutputStreamWriter(fos);
		//s3.构建具体装饰角色2,先将内容写到缓冲区
		BufferedWriter bw = new BufferedWriter(osw);
		bw.write("I love Liu Manlin!");
		bw.write("\n");
		bw.write("Liu Manlin love Xiongjie");
		bw.flush();
		bw.close();
	}
}

4.2 通过字符流读入文件内容

package com.javareview.io.stream.characterstream;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 通过字符流读入文件内容
 */
public class ReaderTest {
	public static void main(String[] args) throws IOException {
		//s1.构建具体构建角色
		FileInputStream fis = new FileInputStream("file.txt");
		//s2.构建具体装饰角色1
		InputStreamReader isr = new InputStreamReader(fis);
		//s3.构建具体装饰角色2
		BufferedReader br = new BufferedReader(isr);
		System.out.println(br.readLine());
		System.out.println(br.readLine());
		
		String str = br.readLine();
		while(null != str) {
			System.out.println(str);
			System.out.println(br.readLine());
		}
		br.close();
	}
}

5.System.out.println

(1)out是System里面的一个成员变量,是一个标准的输出流。是PrintStream类型的,父类是一个FilterOutputStream,是一个过滤流。
(2)println()方法就是向标准输出设备上显示输出内容。对于计算机里面就是命令行。标准的输入设备就是键盘,从键盘里面去接收信息。

5.1接收用户键盘输入

package com.javareview.io.stream.characterstream;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 接收用户键盘输入
 */
public class SystemOutTest {
	public static void main(String[] args) throws IOException {
		InputStreamReader isr = new InputStreamReader(System.in);
		BufferedReader br = new BufferedReader(isr);
		String str ;
		while(null != (str = br.readLine())) {
			System.out.println(str);
		}
		br.close();
	}
}

5.2读取源文件显示在命令行上面

package com.javareview.io.stream.characterstream;

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

/**
 * 文件内容读取
 */
public class FileReaderTest {
	public static void main(String[] args) throws IOException {
		FileReader fr = new FileReader("D:\\workspace\\javareview\\src\\com\\javareview\\io\\stream\\characterstream\\ReaderTest.java");
		BufferedReader br = new BufferedReader(fr);
		String str;
		while(null != (str = br.readLine())) {
			System.out.println(str);
		}
		br.close();
	}
}
r br = new BufferedReader(fr);
		String str;
		while(null != (str = br.readLine())) {
			System.out.println(str);
		}
		br.close();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值