JAVA SE学习day_06:字符流、异常处理
一、字符流
- java将流按照读写单位划分为字节流与字符流
- 字节流:超类为InputStream和OutputStream,读写单位为字节
- 字符流:超类为Reader和Writer,读写单位为cahr
- 字符流封装了字节与字符的转换,因此字符流仅适合去读写文本数据
1.1 转换流
- 转换流是字符流一对常用实现类,是一对高级流。在实际开发中我们不会直接操作这个流,但是在流连接中它是非常重要的一环,负责衔接字节流与其他的高级字符流
转换流向文件中写入字符
//向文件中写入文字FileOutputStream fos = new FileOutputStream("osw.txt",true);//加true后变为追加写入操作OutputStreamWriter osw = new OutputStreamWriter(fos,"gbk");/** 第二个参数是用来指定字符集,这样当字符串通过转换流时* 会按照该字符集转换为对应的一组字节。如果不指定则是按照* 系统默认的字符集转换,不推荐不指定的做法。*/osw.write("12345~");osw.write("上山打老虎");System.out.println("over");osw.close();
转换流从文件中读取字符
FileInputStream fis = new FileInputStream("osw.txt");InputStreamReader isr = new InputStreamReader(fis,"gbk");int d=0;while((d = isr.read())!=-1){char c = (char)d;System.out.print(c);}isr.close();
1.2 缓存字符流
java.io.BufferedWriter和BufferedReader
- 缓存字符流内部有缓冲区,可以块读写文本数据提高读写效率。并且缓冲
- 字符流还有一个特点就是可以按行读写字符串。
- java.io.PrintWriter具有自行行刷新的缓冲字符输出流,内部总是连接 BufferedWriter作为缓冲功能
缓冲字符输出流
java.io.BufferedWriter和 java.io.PrintWriter的连接使用
(单独PrintWriter也可以输出)
PrintWriter pw = new PrintWriter("pw.txt");pw.println("阿萨德");pw.println("123");System.out.println("over");pw.close();
在流连接中使用PrintWriter
FileOutputStream fos = new FileOutputStream("pw.txt",true);OutputStreamWriter osw = new OutputStreamWriter(fos,"gbk");BufferedWriter bw = new BufferedWriter(osw);PrintWriter pw = new PrintWriter(bw);pw.println("123");pw.println("asd");System.out.println("over");pw.close();
建立一个简易记事本
Scanner scan = new Scanner(System.in);System.out.println("请输入文件名:");String name = scan.nextLine();FileOutputStream fos = new FileOutputStream(name+".txt");OutputStreamWriter osw = new OutputStreamWriter(fos,"gbk");BufferedWriter bw = new BufferedWriter(osw);PrintWriter pw = new PrintWriter(bw,true);//加true代表自动行刷新/** PrintWriter构造方法如果第一个参数是一个流(字节流字符流皆可)* 那么就支持第二个boolean型参数,如果该值为true,则具有自动* 行刷新功能,即:每当使用println方法写入一行字符串后会自动* flush*/while(true){System.out.println("请输入想要记载的内容(exit退出):");String s = scan.nextLine();if(s.equals("exit")){System.out.println("已退出");//println自带flush效果break;}byte[]data = s.getBytes("gdk");pw.println(data);System.out.println("完成记录");}pw.close();
缓冲字符输入流
java.io.BufferedReader
- 特点:块读,并且可以按行读取字符串
FileInputStream fis = new FileInputStream("./src/io/BRDemo.java");InputStreamReader isr = new InputStreamReader(fis);BufferedReader br = new BufferedReader(isr);String l = "";while((l = br.readLine())!=null){System.out.println(l);}br.close();
二、异常处理
2.1 try-catch
java异常处理机制
语法:
try{
- 程序代码片段
}catch(XXXException e){ - try中代码出现XXXException后的处理代码
}
System.out.println("start");try{//String str = null;//String str = "";String str = "a";System.out.println(str.length());System.out.println(str.charAt(0));System.out.println(Integer.parseInt(str));/** try语句块中出错代码以下的内容都不会执行*/System.out.println("!!!!");}catch(NullPointerException e){System.out.println("出现了空指针异常");//catch可以定义多个,针对try中不同异常有不同处理时要分别捕捉}catch(StringIndexOutOfBoundsException e){System.out.println("下标越界异常");//在最后一个catch处捕获Excepthion可防止未知异常导致程序中断//但捕捉Exception一定要放到最后一个catch,以免其他catch失效}catch(Exception e){System.out.println("出现异常");}System.out.println("end");
2.2 finally
finally块
- finally块定义在异常处理机制的最后,可以直接跟在try块之后或者最后一个catch块之后
- finally可以保证只要程序执行到try语句块中,无论try语句块中的 代码是否抛出异常,finally中的代码都必定执行。
System.out.println("start");try{String str = "";//String str = null;System.out.println("try");/** 就算是有return语句,也要先执行finally中的代码后,* 方法才会返回。*/return;}catch(Exception e){System.out.println("error");}finally{System.out.println("finally");}System.out.println("over");
finally在IO中的应用
- finally经常被用来做释放资源操作,比如IO中流的关闭操作
FileOutputStream fos = null;try {fos = new FileOutputStream("fos.dat");fos.write(1);System.out.println("writer over");} catch (Exception e){e.printStackTrace();} finally {try {if(fos!=null){fos.close();}}catch (IOException e) {e.printStackTrace();}}
2.3 Autocloseable
在JDK7之后。java推出了一个特性:自动关闭
- 其特性可以让我们用更精简的代码完成IO操作中的异常处以及流的关闭
- try()中定义的流最终都会在finally中被关闭。该特性是编译器认可的,代码会自动转变为FinallyDemo2中的样子并且需要注意的是,不是什么变量都可以定义。只有实现了接口Autocloseable的才可以在这里定义
- java.IO中的流和RandonAccessFile都实现了这个接口,可以定义在里面
try(FileOutputStream fos = new FileOutputStream("fos.dat"); //编译不通过,String没有实现AutoCloseable接口//String str = "";){fos.write(1);System.out.println("writer over");}catch (Exception e) {e.printStackTrace();}
练习
/*5FileOutputStream fos1 = new FileOutputStream("osw.txt",true);OutputStreamWriter osw1 = new OutputStreamWriter(fos1,"gbk");osw1.write("123");osw1.write("sad");System.out.println("end");osw1.close();*//*4 FileOutputStream fos2 = new FileOutputStream("osw.txt",true);OutputStreamWriter osw2 = new OutputStreamWriter(fos2,"gbk");osw2.write("asd");osw2.write("213");System.out.println("over");osw2.close();*//*3 FileOutputStream fos3 = new FileOutputStream("osw.txt",true);OutputStreamWriter osw3 = new OutputStreamWriter(fos3,"gbk");osw3.write("456");osw3.write("wqe");System.out.println("endd");osw3.close();*//*2 FileOutputStream fos4 = new FileOutputStream("osw.txt",true);OutputStreamWriter ows4 = new OutputStreamWriter(fos4,"utf-8");ows4.write("231");ows4.write("asd");System.out.println("over");ows4.close();*//*1 FileOutputStream fos0 = new FileOutputStream("osw.txt",true);OutputStreamWriter osw0 = new OutputStreamWriter(fos0,"utf-8");osw0.write("!@#");osw0.write("asd");System.out.println("end");osw0.close();*/
/*5FileInputStream fis1 = new FileInputStream("osw.txt");InputStreamReader isr1 = new InputStreamReader(fis1,"gbk");int i=0;while((i = isr1.read())!=-1){char c = (char)i;System.out.print(c);}isr1.close();/*4FileInputStream fis2 = new FileInputStream("osw.txt");InputStreamReader isr2 = new InputStreamReader(fis2,"gbk");int a =0;while((a = isr2.read())!=-1){char c = (char)a;System.out.println(c);}isr2.close();/*3FileInputStream fis3 = new FileInputStream("osw.txt");InputStreamReader isr3 = new InputStreamReader(fis3,"utf-8");int s = 0;while((s = isr3.read())!=-1){char c = (char)s;System.out.println(c);}isr3.close();/*2FileInputStream fis4 = new FileInputStream("osw.txt");InputStreamReader isr4 = new InputStreamReader(fis4,"utf-8");int sa = 0;while((sa = isr4.read())!=-1){char c= (char)sa;System.out.println(c);}isr4.close();*//*1FileInputStream fis0 = new FileInputStream("osw.txt");InputStreamReader isr0 = new InputStreamReader(fis0,"utf-8");int as = 0;while((as = isr0.read())!=-1){char c = (char)as;System.out.print(c);}isr0.close();*/
/*5PrintWriter pw1 = new PrintWriter("pw.txt");pw1.print("123");pw1.print("asd");System.out.println("end ");pw1.close();/*4PrintWriter pw2 = new PrintWriter("pw.txt");pw2.print("asd");pw2.print("213");System.out.println("end ");pw2.close();/*3PrintWriter pw3 = new PrintWriter("pw.txt");pw3.print("!@#");pw3.print("asd");System.out.println("over ");pw3.close();/*2PrintWriter pw4 = new PrintWriter("pw,txt");pw4.print("213");pw4.print("123asd");System.out.println("asdover");pw4.close();/*1PrintWriter pw0 = new PrintWriter("pw.txt");pw0.print("++");pw0.print("");pw0.close();System.out.println("end");*/
/*5FileOutputStream fos1 = new FileOutputStream("pw.txt");OutputStreamWriter osw1 = new OutputStreamWriter(fos1,"gbk");BufferedWriter bw1 = new BufferedWriter(osw1);PrintWriter pw1 = new PrintWriter(bw1);pw1.println("asd");pw1.print("asd");pw1.close();/*4FileOutputStream fos2 = new FileOutputStream("pw.txt");OutputStreamWriter osw2 = new OutputStreamWriter(fos2,"utf-8");BufferedWriter bw2 = new BufferedWriter(osw2);PrintWriter pw2 = new PrintWriter(bw2);pw2.print("asd");pw2.close();/*3FileOutputStream fos3 = new FileOutputStream("pw.txt");OutputStreamWriter osw3 = new OutputStreamWriter(fos3,"utf-8");BufferedWriter bw3 = new BufferedWriter(osw3);PrintWriter pw3 = new PrintWriter(bw3);pw3.print("213");pw3.close();/*2FileOutputStream fos4 = new FileOutputStream("pw.txt");OutputStreamWriter osw4 = new OutputStreamWriter(fos4,"gbk");BufferedWriter bw4 = new BufferedWriter(osw4);PrintWriter pw4 = new PrintWriter(bw4);pw4.print("Asd");pw4.close();/*1FileOutputStream fos0 = new FileOutputStream("pw.txt");OutputStreamWriter osw0 = new OutputStreamWriter(fos0,"gbk");BufferedWriter bw0 = new BufferedWriter(osw0);PrintWriter pw0 = new PrintWriter(bw0);pw0.print("wsd");pw0.close();*/
/*5FileInputStream fis1 = new FileInputStream("./src/io/BRDemo.java");InputStreamReader isr1 = new InputStreamReader(fis1);BufferedReader br1 = new BufferedReader(isr1);String s1 = "";while((s1 = br1.readLine())!=null){System.out.println(s1);}br1.close();/*4FileInputStream fis2 = new FileInputStream("./src/io/BRDemo.java");InputStreamReader isr2 = new InputStreamReader(fis2);BufferedReader br2 = new BufferedReader(isr2);String s2 = "";while((s2 = br2.readLine())!=null){System.out.println(s2);}br2.close();/*3FileInputStream fis3 = new FileInputStream("./src/io/BRDemo.java");InputStreamReader isr3 = new InputStreamReader(fis3);BufferedReader br3 = new BufferedReader(isr3);String s3 = "";while((s3=br3.readLine())!=null){System.out.println(s3);}br3.close();/*2FileInputStream fis4 = new FileInputStream("./src/io/BRDemo.java");InputStreamReader isr4 = new InputStreamReader(fis4);BufferedReader br4 = new BufferedReader(isr4);String s4 = "";while((s4=br4.readLine())!=null){System.out.println(s4);}br4.close();/*1FileInputStream fis5 = new FileInputStream("./src/io/BRDemo.java");InputStreamReader isr5 = new InputStreamReader(fis5);BufferedReader br5 = new BufferedReader(isr5);String s5 = "";while((s5=br5.readLine())!=null){System.out.println(s5);}br5.close();*/
FileOutputStream fos = null;try {fos = new FileOutputStream("fos.dat");fos.write(1);System.out.println("writer over");} catch (Exception e){e.printStackTrace();} finally {try {if(fos!=null){fos.close();}}catch (IOException e) {e.printStackTrace();}}/*4FileOutputStream fos1 = null;try{fos1=new FileOutputStream("fos.dat") ;fos1.write(5);System.out.println("writer over");return;}catch(Exception e){e.printStackTrace();} finally {try{if(fos1!=null){fos1.close();}}catch(IOException e) {e.printStackTrace();}}/*3FileOutputStream fos2 = null;try {fos2 = new FileOutputStream("fos.txt");fos2.write(4);System.out.println("writer end");return;}catch(Exception e){e.printStackTrace();} finally {try {if(fos2!=null){fos2.close();}}catch(IOException e){e.printStackTrace();}}/*2FileOutputStream fos3 = null;try{fos3 = new FileOutputStream("fos.dat");fos3.write(4);System.out.println("asdas");return;}catch(Exception e){e.printStackTrace();}finally{try{if(fos3!=null){fos3.close();}}catch(IOException e){e.printStackTrace();}}/*1FileOutputStream fos4 = null;try{fos3 = new FileOutputStream("fos.dat");fos3.write(4);System.out.println("over");return;}catch(Exception e){e.printStackTrace();}finally{try{if(fos4!=null){fos4.close();}}catch(IOException e){e.printStackTrace();}}*/
try(FileOutputStream fos = new FileOutputStream("fos.dat"); //编译不通过,String没有实现AutoCloseable接口//String str = "";){fos.write(1);System.out.println("writer over");}catch (Exception e) {e.printStackTrace();}/*4try(FileOutputStream fos1 = new FileOutputStream("fos.txt"); ){fos1.write(4);System.out.println("over");}catch(Exception e){e.printStackTrace();}/*3try(FileOutputStream fos2 = new FileOutputStream("fos.dat"); ){fos2.write(7);System.out.println("over");}catch(Exception e){e.printStackTrace();}/*2try(FileOutputStream fos3 = new FileOutputStream("fos.dat"); ){fos3.write(23);System.out.print("over");}catch(Exception e){e.printStackTrace();}/*1try(FileOutputStream fos4 = new FileOutputStream("fos.dat"); ){fos4.write(23);System.out.print("over");}catch(Exception e){e.printStackTrace();}*/
JAVA SE学习day_06:字符流、异常处理相关推荐
- 第一阶段Java SE学习概述
Java SE学习概述 Java SE 学习分为五个阶段 第一部分:基础程序设计: 第二部分:面现象对象编程: 第三部分:Java SE 高级应用: 第四部分:JavaSE 新特性: 第五部分:MyS ...
- 一个编程小白的Java SE学习日志 X—— 输入输出(IO)流【极客BOY-米奇】
文章目录 前言(转载请说明作者!)4.30~5.7编写 File类 File类的构造方法 File类常用方法 File类的一些常用方法实例 IO流 IO流的分类 按数据流的方向分类 按是否直接操作源或 ...
- JAVA SE学习笔记(七):终章:Java程序设计基础笔记(全10万字)
Java程序设计入门 copyright © 2020 by 宇智波Akali 目录 文章目录 第1章 J ...
- Java IO 字节流与字符流 (三)
概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 ...
- java.IO字节流和字符流详解
IO流的分类 在学习字节流和字符流之前因该先学习IO流的分类,效果会更好 有多种分类方式: 一种方式是按照流的方向进行分类: 以内存作为参照物, 往内存中去,叫做输入(Input).或者叫做读(Rea ...
- 四十、Java中字节流和字符流介绍和区别
@Author:Runsen @Date:2020/6/6 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...
- Java中字节流和字符流的比较(转)
字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操 ...
- Java SE 学习记录——进阶版11
@学习记录 开始学习Java 遵从同学的指导,从Java se开始学习 黑马的JavaSE零基础入门[网络编程] 第一章 网络编程入门 1.1 软件结构 22-02 软件结构 1.2 网络通信协议 2 ...
- JAVA SE 学习路径
基础入门 环境配置 语句基础 字符串 数组 方法 常用类 Math StringBuilder.StringBuffer Date.SimpleDateFormat.Calendar 面向对象 类和对 ...
最新文章
- oracle 错误: ORA-12899:始终提示字段太大
- Apache Subversion command line tools下载地址 svn命令行客户端
- 乔布斯亲笔签名的Apple II手册 拍卖了511万元
- 《数据结构》—— 串,KMP模式算法(转载)
- 【ArcGIS微课1000例】0021:ArcToolBox工具箱功能与环境概述
- angularjs 表单验证 和 页面初始化闪烁
- eas之Uuid和BOSUuid 区别
- [转载] python oct_Python oct()
- Python Ubuntu 获取进程信息
- python 趋势线计算式_怎么将趋势线公式编辑成计算公式
- 防止linux子系统关闭,Linux关闭selinux安全子系统的方法
- 在读服务器端的备份说明文件错误,3dmax保存文件时出错,提示“无法创建备份文件”的原因和解决方法...
- origin数据平滑_origin怎样平滑曲线 看完你就会了
- 基于Java的资产管理系统的设计与实现
- Colibri 片段化学空间的兴起
- IDEA改变文件夹显示方式
- Android异常与性能优化相关问题及解决办法
- Cobalt Strike 域内渗透
- STORJ 有实际应用
- 【爬虫】 Squid 3.5.20 安装与配置 高匿代理
热门文章
- JMeter和JMeterPlugin的下载安装
- 将课程中的所有动手动脑的问题以及课后实验性的问题,整理成一篇文档,以博客形式发表在博客园...
- 第一讲 网络安全概述笔记
- Java数据结构--有序表
- Internet Explorer 8 使用技巧(2):加速器
- Windows Server 2012 R2/2016/2019无法安装.NET Framework 3.5.1或语言包的解决方法
- 数据库分库分表和带来的唯一ID、分页查询问题的解决
- 如何使用npm重新安装应用程序的依赖项?
- 将Iterable转换为Collection的简便方法
- 声明一个const数组