Java-IO流入门,一篇就够了!

Java-IO流

一、IO流概述

I 就是input的首字母:输入。
把硬盘中的数据,读取到内存使用。

o就是output的首字母:输出。
把内存中的数据,写入到硬盘中保存。

内存的概念:临时储存数据
这里主要记住内存是中心,进内存就是输入,出内存就是输出。

二、流们!(不要加氓)

字节流字符流
输入流字节输入流 InputStream字符输入流 Reader
输出流字节输出流 OutputStream字符输出流 Writer
节点流处理流
流的一端是程序,另一端是节点以其他已经存在的流作为一个端点的流
构造方法的参数是节点构造方法总有一个其他流对象作为参数

前提知识

字节:计算机中一切皆字节(视频,图片和文本),本质就是二进制码。
字符:是指计算机中使用的文字和符号,比如1、2、A、B、~!*#¥%等等。

字节流

1.字节输入流
先在D盘下创建一个hello.txt
里面内容写上hello baby
步骤:
1> 定义一个文件流
2>定义一个字节数组
3>将输入流的数据读入到字节数组中
4>通过UTF-8编码表将字节转换为字符

代码实践:

public class InputStream  {	
	public static void main(String[] args) throws IOException{
		File file=new File("D://hello.txt");//显示具体路径
		FileInputStream fs =new FileInputStream(file);//定义一个文件流
		byte[] b=new byte[1024];//定义一个字节数组
	 	fs.read(b);//将输入流的数据读入到字节数组中
 		String str=new String(b,"UTF-8");//通过UTF-8编码表将字节转换为字符
 		System.out.println(str); //输出到控制台
   	}
 }

温馨提示:需要导包,Eclipse会提示,左键点击左边的那个丑陋的小灯泡,按下回车键就哦了

注意:如果在那个txt文件里,输入的是中文:我好帅。控制台显示的是???
不是它质疑你的帅气,而是不支持中文,编码过不去。

2.字节输出流
步骤:
1> 创建一个输出流
2>将字符转换成字节
3>字节写出文件
4>保存文件
代码实践:

public class OutputStream {
	public static void main(String[] args) throws IOException {
  		String file="D://test.txt";
  		FileOutputStream out=new FileOutputStream(file);//创建输出流
  		String str="hello baby";
  		byte[] b=str.getBytes();//字符转换为字节
  		out.write(b);//字节写出到文件
  		out.flush();//保存文件

温馨提示:需要导包,Eclipse会提示,左键点击左边的那个丑陋的小灯泡,按下回车键就哦了

这段代码执行后,你会发现D盘创建一个test.txt文件,里面写着hello baby

字符流

字符流和字节流步骤相似,不再累述!
1.字符输入流
先在D盘下创建一个hello.txt
里面内容写上hello baby
代码实践:

public class Reader {	
	public static void main(String[] args)throws IOException	
		String file="D://hello.txt";//显示具体路径
	  	FileReader fr =new FileReader(file);//定义一个文件流
  	 	byte[] b=new byte[1024];//定义一个字节数组
  	 	fr.read(b);//将输入流中的数据读入到字节数组中
  	 	System.out.println("b")//输出到控制台
  	 	fr.close();//关闭输入流

当你执行完这段代码后发现,输出hello baby的同时,还有1014个空格

为了解决打印多余空格问题,查阅API帮助文档,reader方法是将字符流中的数据读入到字符数组中,如果读取到文件末尾则返回-1,否则返回读取到的长度,所以只要遇到-1就终止好了。

	String file = "D://hello.txt";
	FileReader fr = new FileReader(file);//定义一个文件流
	char[] cbuf = new char[1024];//定义一个字节数组
	int len = 0; // 每次读取的长度
	StringBuilder builder = new StringBuilder();
 	while ((len = fr.read(cbuf)) != -1) { 
 	//将数据读入到cbuf中并返回读取到的数据长度,不等于-1就继续
 		builder.append(cbuf,0,len);}
 		//将cbuf 0 到len长度的数据添加到builder 
  	System.out.println(builder.toString());//输出到控制台

2.字符输出流
代码实践:

public class Writer {
	public static void main(String[] args)throws IOException
		File file=new File("D://hello.txt");
		FileWriter fw=new FileWriter(file);//定义一个文件流
		fw.write("hello baby");//写出到文件
		fw.close();//关闭流

这段代码执行后,你会发现D盘创建一个test.txt文件,里面写着hello baby

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值