lesson7:java的IO流

本文深入讲解Java IO流的概念、分类及使用方法,包括输入输出流、字符流与字节流的区别,以及如何利用FileOutputStream、FileWriter和OutputStreamWriter进行文件读写操作。

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

一.what?(什么是IO流)

Java把不同的输入输出源(键盘、文件、网络文件等)抽象成流的形式,通过流的方式,使得java程序以相同的方式去访问不同的输入输出源,流是输出到输入端的一种有序数据

二.why?(为什么需要IO流)

IO流是输入输出的基础,使得文件的输入输出更加方便操作。

三.how?(怎样使用IO流)

再说怎么样去使用IO流前,我们先讲讲IO流的分类

1.IO流的分类

a.按照流的流向划分,可以分为两类:
输入流:只能从中读数据,不能向其写数据
输出流:只能向其写数据,不能从中读数据。
java输入流主要有InputStream 和Reader作为基类 ,输出流主要有OutputStream和Writer两个基类

b.从操作数据大小划分,也可划分为两类:
字符流:操作最小的单位为16位的基本数据。
字节流:操作最小的单位为8位的基本数据。

b.从流的角色划分,也可划分为两类:
低级流(节点流):直接从soure到sink端的流
高级流(处理流): 对已存在的低级流的一种封装来进行对数据操作。(是一种典型的装饰器的设计模式,有兴趣的同学可以看下

Java IO流共涉及到40几个类,但是基本上都是从以下四个类派生出来的,字符流:Reader(输入流)、Writer(输出流)字节流:InputStream(输入流)、OutputStream(输出流)。这里仿网上的自己撸了个脑图:
在这里插入图片描述

或者按照使用场景划分:

图片摘自疯狂java讲义

2.常用IO类使用

`这里拿文件流举个简单的例子,其他的使用,请大家查看具体api

private static void WriterFos() {
	//字节流写入文件
FileOutputStream fos=null;
File file=new File("a.txt");
try {
	fos=new FileOutputStream(file);
	fos.write("aa".getBytes());
	fos.flush();
} catch (FileNotFoundException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
} catch (IOException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}finally {
	//操作结束后 一定要关闭
	if(null!=fos) {
		try {
			fos.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
	
}

private static void WriterFileWriter() {
	//字符流写入文件
	FileWriter fw=null;
	File file=new File("b.txt");
	try {
		fw=new FileWriter(file);
		fw.append("b");
		fw.flush();
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}finally {
		if(null!=fw) {
			try {
				fw.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
}
private static void WriterConvertStream() {
	//字符流写入文件
	FileOutputStream fos=null;
	OutputStreamWriter osw=null;
	try {
		File file=new File("c.txt");
		System.out.println(file.getPath());
		System.out.println(file.getAbsolutePath());
		fos=new FileOutputStream(file);
		   // 构建FileOutputStream对象,文件不存在会自动新建
		osw=new OutputStreamWriter(fos);//转换流 将输出字节流转成字符输出流
		osw.append('c');
		osw.flush();
		
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}finally {
		//操作结束后 一定要关闭
		if(null!=osw) {
			try {
				osw.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if(null!=fos) {
			try {
				fos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

本文如果不正之处。欢迎大家批评指正。
文末给大家推荐一下这篇博客:https://www.cnblogs.com/skywang12345/p/io_01.html ,这个里面关于IO讲的很全面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值