Java 常见IO流 总结

Java IO


什么是流

  • 内存与存储设备之间传输数据的通道

流的分类

方向分:

  • 输出流: 由内存写入存储设备
  • 输入流:由存储设备读入内存

单位分:

  • 字节流:以字节为单位传输数据,可以读写所有数据
  • 字符流:以字符为单位传输数据,只能读写文本数据

功能分:

  • 节点流:具有实际传输数据的读写功能
  • 过滤流:在节点流基础之上增强功能

流的介绍

在这里插入图片描述


字节输入输出流

FileInputStream:从某个文件获取输入字节。

public class Demo{
	public static void main(String[] args) throws Exception{
		// 创建InputStream 指定文件在c盘
		FileInputStream fil = new FileInputStream("c:\\zpy.txt");
		// 单个字节读取文件
		int date = 0;
		while((date = fil.read()) != 0){
			System.out.print((char)date);
		}
		// 多字节读取文件
		byte[] buf = byte[3];
		int count = 0;
		while((count = fil.read(buf)) != 0){
			System.out.print(new String(buf,0,count));
		}
		// 关闭输入流
		fil.close();
	}
}

FileOutputStream:从内存中获取输出字节。

public class Demo1{
	public static void main(String[] args) throws Exception{
		// 创建OutputStream 指定文件在c盘
		FileOutputStream fol = new FileOutputStream("c:\\zz.txt");
		fol.write("asdasd");
		String string = "asdasdasd";
		fol.write(string.getBytes());
		// 关闭输出流
		fol.close();
	}
}

字节缓冲流

BufferedInputStream

public class Demo2{
	public static void main(String[] args) throws Exception{
		// 创建InputStream 指定文件在c盘
		FileInputStream fil = new FileInputStream("c:\\pp.txt");
		BufferedInputStream bis = new BufferedInputStream(fil);
		int count = 0;
		while((count = bis.read()) != 0){
			System.out.print((char)count);
		}
		// 关闭输入流
		bis.close();
	}
}

BufferedOutputStream

public class Demo3{
	public static void main(String[] args) throws Exception{
		// 创建OutputStream 指定文件在c盘
		FileOutputStream fil = new FileOutputStream("c:\\yy.txt");
		BufferedOutputStream bos = new BufferedOutputStream(fil);
		// 写入缓冲区 8K
		bos.write("asdasd".getBytes());
		// 刷新缓冲区
		bos.flush();
		// 关闭输出流
		bos.close();
	}
}

对象流

  • 增强缓冲区功能
  • 增强8种数据类型和字符串的功能
  • 增强读写对象功能

序列化

注:序列化类必须要实现Serializable接口

public class Demo6 {
	public static void main(String[] args) throws Exception{
		//1创建对象流
		FileOutputstream fos = new FileOutputstream("d:\\stu.bin");
		ObjectOutputstream oos = new ObjectOutputstream(fos);
		//2序列化(写入操作)
		Student zhangsan = new Student("张 ", 20);
		oos.writeObject(zhangsan);
		//3关闭
		oos.close();
		System.out.print1n("序列化完毕");
		}
}

反序列化

public class Demo7 {
	public static void main(String[] args) throws Exception {
		//1创建对象流
		FileInputStream fis=new FileInputStream("d:\\stu.bin");
		objectInputStream ois=new objectInputStream(fis);
		//2读取文件(反序列化)
		Student s= (Student)ois.readobject();
		//3关闭.
		ois.close();
		System.out.println("执行完毕");
		System.out.println(s.toString()); I
	}
}

字符流

字符编码介绍

字符编码用途
ISO-8859-1收录除ASCII外,还包括西欧,希腊语、泰语、阿拉伯语、希伯来语对应的文字符号(1字符占1字节)
utf-8针对Unicode码表的可变长度字符编码
GB2312简体中文
GBK简体中文、 扩充(GB2312升级版)
BIG5台湾,繁体中文.

在这里插入图片描述

实现类

FileReader:

  • public int read(char[] c) //从流中读取多个字符,将读到内容存入c数组,返回实际读到的字符数;如果达到文件的尾部,则返回-1。 .
public class Demo2 {
	pub1ic static void main(String[] args) throws Exception{
		//1创建FileReader文件字符输入流
		FileReader fr = new FileReader("d:\\he1lo.txt");
		//2读取
		//单个字符读取
		int data=0;
		while((data=fr.read())!=-1){          //读取一个字符.
			System.out.print((char)data);
		}
		//3关闭
		fr.close();
	}
}

FileWriter:

  • public void write(String str) //- 次写多个字符,将b数组中所有字符,写入输出流。
public class Demo3 {
	public static void main(String[] args) throws Exception {
		//1创建F ileWriter对象
		FileWriter fw = new FileWriter("d:\\write.txt");
		//2写入.
		for(int i=0;i<10;i++) {
			fw.write("java是世界上最好的语言\r\n");
			fw.flush();        // 刷新缓冲区
		}
		//3关闭
		fw.close();
		System.out.println("执行完毕");
	}
}

字符缓冲流

  • 高效读写
  • 支持输出换行
  • 支持成行读取,写入

BufferedReader:

public class Demo5 {
	public static void main(String[] args) throws Exception{
		//1创建缓冲流
		FileReader fr=new FileReader("d:\\write.txt");
		BufferedReader br=new BufferedReader(fr);
		//2读取
		
		//第一种方式
		//char[] buf=new char[1024];
		//int count=0;
		//while((count=br.read(buf))!=-1) {
		//System.out.print(new String(buf,0,count));
		//}

		//第二种方式,一行一行的读取
		String line=nul1;
		while((line=br.readLine())!=nu11) {
			System.out.print1n(line);
		}
		//3关闭
		br.close();
	}
}

BufferedWriter:

public class Demo6 {
public static void main(String[] args) throws Exception{
	//1创建BufferedWriter对象
	FileWriter fw=new FileWriter("d:\\buffer. txt");
	BufferedWriter bw=new BufferedWriter(fw) ;
	//2写入
	for(int i=0;i<10;i++){
	bw.write("好好学习,天天向上");
	bw.newLine(D; //写入一个换行符   windows \r\n   linux\n
	bw.flush();
	//3关闭
	bw.close();
	System.out.println("执行完毕");
}

打印流

  • 封装了print() / print1n()方法,支持写入后换行。
  • 支持数据原样打印

PrintWriter:

pub1ic class Demo7 {
	public static void main(String[] args) throws Exception {
	//1创建打印流
	PrintWriter pw=new PrintWriter("d:\\print.txt");
	//2打印
	pw.println(97) ;
	pw.println(true) ;
	pW.println(3.14);
	pw.println('a');
	//3关闭
	pw.close();
	System.out.println( "执行完毕");
}

转换流: InputStreamReader/0utputStreamWriter

  • 可将字节流转换为字符流。
  • 可设置字符的编码方式。

InputStreamReader:

pub1ic class Demo1 {
	public static void main(String[] args) throws Exception {
	//1创建InputStreamReader对象
	FileInputStream fis=new FileInputStream("d:\\write.txt");
	InputStreamReader isr=new InputstreamReader(fis,"gbk");
	//2读取文件
	int data=0;
	while((data=isr.read())!=-1){
		System.out.print((char)data);
	}
	//3关闭
	isr.close();
}

OutputStreamWriter:

pub1ic class Demo2 {
public static void main(String[] args) throws Exception{
	//1创建0utputStreamWriter
	File0utputStream fos=new File0utputStream("d:\\info.txt");
	OutputStreamWriter osw=new OutputStreamWriter(fos,"gbk");
	//2写入
	for(int i=0;i<10;i++) {
	osw.Write("我爱北京,我爱故乡\r\n");
	osw.flush();
	}
	//3关闭.
	osw.close();
	System.out.println("执行成功");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值