I/O的简介
- 文本我们能读懂的都可以认为是字符流,文章 java文件都是字符流数据 - 流的分类 输入流 输出流 
 
- 1。输出流 Writer:关于字符流的父类,抽象类。与之相对的输入流 Reader类 
- 一、字符流 - 字符流的命名规则:如果是输出流那么就以Writer结尾,如果是输入流就以Reader结尾 
 
案例1:
使用字符流向一个文件输入Hello 沃得;
| publicstaticvoid main(String[] args) { File file =new File("test.txt"); System.out.println(file.length()); Writer writer = null; try { //I/O流是需要关闭的,如果不这样做就不能关闭资源 writer = new FileWriter(file); writer.write("hellow"); } catch (IOException e) { e.printStackTrace(); }finally { //判断writer不是空 防止空指针异常 if(writer != null) { try { //writer.close的功能和flash一样都是清除缓存 writer.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } | 
主要考虑异常的处理,writer的声明方法也需要仔细查看,根据写入的数据类型决定选择哪个方法来写入内容
文件的追加:
| publicstaticvoid Filefile System.out.println(file.length()); Writer try //I/O流是需要关闭的,如果不这样做就不能关闭资源 //后面的布尔值如果为true则是在文件后面追加内容 writer for(inti writer.write("halloword"); 个哈喽沃得就清除一下缓存 if(i System.out.println("\n"); writer.flush(); } } } e.printStackTrace(); }finally //判断writer不是空 if(writer try //writer.close的功能和flash一样都是清除缓存 writer.close(); } // e.printStackTrace(); } } } } | 
字符输出流的换行:
- 在写入的内容中的换行符\n前加上\r才能实现换行 
| try //I/O流是需要关闭的,如果不这样做就不能关闭资源 //后面的布尔值如果为true则是在文件后面追加内容 writer for(inti writer.write("halloword\r\n"); 个哈喽沃得就清除一下缓存 if(i System.out.println(""); writer.flush(); } } } e.printStackTrace(); } writer的写入方法: writer char[] writer.write(c, | 
- 字符的输入流: 
| publicstaticvoid File Readerreader try reader //单个字符的读取,读取的字符被转换为ASCII码 /* * 通过char可以将获得的ASCII强转为char的字符型, * read()方法在读取到最后的时候值会变成-1,所以可以用while * 循环遍历文本中的内容,这种单个字符的读取性能不高。一般不用 */ intc; try while((c System.out.print((char)c+"\r\n"); } } // e.printStackTrace(); } } // e.printStackTrace(); }finally if(reader try reader.close(); } // e.printStackTrace(); } } } } | 
- 字符输入流2:用数组读取内容 
| publicstaticvoid File Reader try reader //定义一个数组,这个方法是较为常用的方法 char[] //向字符数组填数据 try intlen //intlen //System.out.println("len的值"+len+"读取的内容"+Arrays.toString(arr)); 输出结果为len的值10 * 元素有多长替换多长的,空出来的数组下标位置,还是为以前的元素值 * 知道最后完全没有元素了,读取长度变为-1 * while循环获得文本中的所有内容,由于最后一次读取,不一定能读取够 * 定义的数组长度,所以在将其转成字符串的使用用String(数组名,取值开始位置,取值结束位置) * 将结束位置设置为从read()方法获得的长度。直到其返回为-1,while结束循环。 */ while((len String System.out.print(str); } } // e.printStackTrace(); } } // e.printStackTrace(); }finally try reader.close(); } // e.printStackTrace(); } } } | 
- 文件的拷贝 - publicstaticvoid 
 main(String[] args)
 {- * 1.通过输入流将文件读取到字符串中; - File 
 file
 =new
 File("D:\\Users\\Administrator\\eclipse-workspace\\7.13\\src\\ExtendOne.java");- Reader 
 reader
 = null;- File 
 file1
 = new
 File("javaCopy.java");- Writer 
 writer
 = null;- try 
 {- intlen; - //创建字符输入流的对象 - reader 
 = new
 FileReader(file);- try 
 {- //创建字符输出流的对象 - writer 
 =new
 FileWriter(file1);- } 
 catch
 (IOException e1)
 {- // 
 TODO
 Auto-generated catch block- e1.printStackTrace(); - } - char[] 
 arr
 = newchar[10];- try 
 {- while((len 
 = reader.read(arr))
 != -1){- //把输入流读取到的数据写入字符输出流,输出流被写入玩后需要writer.flush()清除缓存; - writer.write(arr, 
 0, len);- } - writer.flush(); - } 
 catch
 (IOException e)
 {- // 
 TODO
 Auto-generated catch block- e.printStackTrace(); - } - } 
 catch
 (FileNotFoundException e)
 {- // 
 TODO
 Auto-generated catch block- e.printStackTrace(); - }finally 
 {- //需要将打开的输入输出流关闭 - //原则为:先打开的后关闭,后打开的先关闭.都需要异常处理 - //两个异常处理可以合一块,在同一个try内判断是否为空并关闭对象即可。 - if(writer 
 != null)
 {- try 
 {- writer.close(); - } 
 catch
 (IOException e)
 {- // 
 TODO
 Auto-generated catch block- e.printStackTrace(); - } - } - if(reader 
 != null)
 {- try 
 {- reader.close(); - } 
 catch
 (IOException e)
 {- // 
 TODO
 Auto-generated catch block- e.printStackTrace(); - } - } - } - } - 字节流的高效缓冲字节流 
 
| publicstaticvoid //定义一个高效缓冲字节流,可以复制图片 BufferedInputStream BufferedOutputStream try //创建一个高效缓冲字节流对象 //和输入输出流一样都是需要关闭的,先开的后关,后开的先关 in out //定义一个字节数组 byte[] //定义一个标志 intlen; try while((len out.write(bs,0,len); } } // e.printStackTrace(); } } // e.printStackTrace(); }finally if(out try out.close(); } // e.printStackTrace(); } } if(in try in.close(); } // e.printStackTrace(); } } } } | 
字符流和字节流的转换桥梁:
- 字符流操作文本,字节流操作二进制,字节是最小的基本单位,一个字符占两个字节。 
- OutputStreamWriter:是字符流转换为字节流的桥梁,可使用指定的charset将要写入流中的字符编码成字节。 - 编码:不同的编码格式得到的值不同!utf-8表和GBK表,可以通过右键工程选择Propertise菜单进入编码格式编辑菜单。设置的编码格式如果和写入时保存的文件格式不同则会产生乱码,因此需要进行编码设置。字符流通向字节流的桥梁可以指定存储编码 
 
I/O的简介的更多相关文章
- ASP.NET Core 1.1 简介
		ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ... 
- MVVM模式和在WPF中的实现(一)MVVM模式简介
		MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ... 
- Cassandra简介
		在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ... 
- REST简介
		一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ... 
- Microservice架构模式简介
		在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ... 
- const,static,extern 简介
		const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ... 
- HTTPS简介
		一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ... 
- 【Machine Learning】机器学习及其基础概念简介
		机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ... 
- Cesium简介以及离线部署运行
		Cesium简介 cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎,一款开源3DGIS的js库.cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区 ... 
- 1.Hibernate简介
		1.框架简介: 定义:基于java语言开发的一套ORM框架: 优点:a.方便开发; b.大大减少代码量; c.性能稍高(不能与数据库高手相比,较一般数据库使用者 ... 
随机推荐
- vs2008在win7系统中安装不问题
			据说是office软件冲突问题. 解决方案是卸载了office软件,不管是2007还是其它版本,先安装vs2008,再安装其它的. 
- js数字转成金额格式
			本文有以下三个段落 1.方法展示 2.方法说明 3.方法实例 1.方法展示 //将数字转换成金额显示 function toMoney(num){ num = num.toFixed(2); num ... 
- git实战经验(很实用)
			推荐学习git很好的网站https://www.breakyizhan.com/git/216.html 以下内容,虽然编排不行,但是请认真的读下去,都是自己平时请自操作的,放心使用. 这是个人的gi ... 
- 深入浅出Ajax
			原文(我的GitHub):https://github.com/liangfengbo/frontend-ability/issues/1 学习大纲 理解Ajax的工作原理 Ajax核心-XMLHtt ... 
- 用JavaScript刷LeetCode的正确姿势
			虽然很多人都觉得前端算法弱,但其实 JavaScript 也可以刷题啊!最近两个月断断续续刷完了 leetcode 前 200 的 middle + hard ,总结了一些刷题常用的模板代码.走过路过 ... 
- vue history 模式打包部署在域名的二级目录的配置指南
			最近在做项目,需要把项目部署在域名下的二级目录,并且是在用vue-router的history 模式. 我们都知道vue-router 的两种前端基本访问模式 hash 和history .hash ... 
- Spring-Boot + MyBatis-Plus 踩坑记录
			这两天在学SpringBoot+MyBatis的开发,配置开发环境和DEMO的过程中踩了很多坑,在这里记录一下. 我的开发环境是idea + JDK 1.8.0.211. 首先展示一下demo的项目整 ... 
- 视频直播:Windows中各类画面源的截取和合成方法总结
			当今,视频直播技术和实时音视频技术已经是很多行业必备,典型的应用场景有教育直播.远程视频会议.互联网娱乐等.在移动端发起直播,其画面源的种类是十分有限的,无非是取摄像头.截屏等.PC端由于其系统资源充 ... 
- Enter passphrase
			提示“Enter passphrase for key /root/.ssh/id_rsa.pub”让输入私钥,可不论输与不输都不能直接登录 解决方法: 在本地执行: eval `ssh-agent` ... 
- Python基础-使用range创建数字列表以及简单的统计计算和列表解析
			1.使用函数 range() numbers = list(range[1,6]) print (numbers) 结果: [1,2,3,4,5] 使用range函数,还可以指定步长,例如,打印1~1 ... 
