Java基础_10_IO流总结

本文全面总结了Java中的IO流,包括字符流与字节流的分类和使用,如FileWriter、FileReader、BufferedReader、BufferedWriter、FileInputStream、FileOutputStream及其缓存装饰类。此外,还涉及File类、Properties、PrintStream、SequenceInputStream、ObjectStream、PipedStream和RandomAccessFile的使用方法和实例演示。
摘要由CSDN通过智能技术生成


_____IO(Input Output)流_____


概述

IO流就是用来处理设备之间的数据传输的,而Java对数据的的操作时通过流的方式,其操作流的类都在IO包中。


流分类

按照操作的数据分为:字节流和字符流

按流向分为:输入流,输出流


IO流常用基类

字节流的抽象基类:InputStream,OutputStream
字符流的抽象基类:Reader,Writer

在说IO流之前,我们先要理解几个概念:
字节:一字节(byte)等于8位二进制码,在计算机中存储的信息都是以二进制形式表示的
字符:为了方便人机交互,将人类语言和计算机二进制语言之间建立一个映射表(编码表),通过不同的二进制码来表示不同的文字,所看到的人类语言字体就是字符,一个字符因为编码的不同会占用不同的字节数
编码表:人类文字在计算机中的存储映射,编码表按照时间顺序常见的有ASCII,GB2312中文对应表,扩容中文码表GBK,扩充中文码表GB18030(区分中文编码的方法是高字节的最高位不为0,从ASCII到GB18030是向下兼容的);为了整合世界文字编码,出现了unicode字符编码标准,而UTF-8编码表就是其实现方式之一
乱码:
0000 0000计算机中八位为1字节,ASCII编码表中用0100 0001来代表文字"A"。同一个文字在不同的编码表中映射可能不一致,比如在GBK编码表中文字“黑”的编码为BADA,在UTF-8中“黑”为E9BB91,当我们以GBK形式将黑(BADA)存入计算机文本文件,在读取文本文件的时候对照UTF-8编码表翻译,那么取出来的将不是文字“黑”,而是其他文字或者查询不到任何文字,这就是乱码。

字符流

概述:

对于数据而言,文本居多,所以Java单独建立了字符流来处理文本数据


文本文件流:FileWriter和FileReader

概述:

这是字符流抽象基类的两个实现子类,主要是对文本文件进行IO操作。

FileWriter写出文件实例:

FileWriter fw = null;
try {
	//只能创建文件,不能创建路径,路径必须为已有路径
    fw = new FileWriter("D:/demo.txt");  
    fw.write("黑马");
    //此类具有缓存机制,写入的数据暂时保存在流中,需要刷新才能写入到文本文件中
    //close()关闭流时会自动执行一次刷新操作,所以此处可以省略
    fw.flush();
} catch (IOException e) {  
    e.printStackTrace();
} finally {  
    if (fw != null)  
        try {
            fw.close();  
        } catch (IOException e) {  
            e.printStackTrace();
        }  
}

FileReader读入文件实例:

FileReader fr = null;
try {
	fr = new FileReader("D:/demo.txt");
	char[] cbuf = new char[1];// 读取到数据在非UTF-8编码下为2KB大小,char为2字节16位;UTF-8编码下为3KB大小
	int len = -1;
	while ((len = fr.read(cbuf)) != -1) {
		System.out.println(len + ":" + new String(cbuf, 0, len));
		System.out.println(Integer.toHexString(cbuf[0]));
		/* 
		 * Windows系统创建的UTF-8文本文件通常会在文本的开头放置一个标识字节序的编码;
		 * 所以自己通过windows系统创建的文本可能出现读取出来的第一位长度为1,内容为空,存储的是字节序
		 * 字节序分为如下两类:
		 * FFFE:Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端;
		 * FEFF:Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端; 
		 * 比如 int a = 0x05060708:
		 * 在BIG-ENDIAN的情况下存放为: 字节号 0 1 2 3 数据 05 06 07 08
		 * 在LITTLE-ENDIAN的情况下存放为: 字节号 0 1 2 3 数据 08 07 06 05
		 */
	}
} catch (FileNotFoundException e) {
	e.printStackTrace();
} catch (IOException e) {
	e.printStackTrace();
} finally {
	if (fr != null)
		try {
			fr.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
}

FileReader与FileWriter结合使用:

//读取文本文件并且写入另一个文本文件
FileReader fr = null;
FileWriter fw = null;
try {
	fr = new FileReader("D:/demo.txt");
	fw = new FileWriter("D:/demo2.txt&#
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值