一、字符流

  • 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:字符流、异常处理相关推荐

  1. 第一阶段Java SE学习概述

    Java SE学习概述 Java SE 学习分为五个阶段 第一部分:基础程序设计: 第二部分:面现象对象编程: 第三部分:Java SE 高级应用: 第四部分:JavaSE 新特性: 第五部分:MyS ...

  2. 一个编程小白的Java SE学习日志 X—— 输入输出(IO)流【极客BOY-米奇】

    文章目录 前言(转载请说明作者!)4.30~5.7编写 File类 File类的构造方法 File类常用方法 File类的一些常用方法实例 IO流 IO流的分类 按数据流的方向分类 按是否直接操作源或 ...

  3. JAVA SE学习笔记(七):终章:Java程序设计基础笔记(全10万字)

    Java程序设计入门 ​                                              copyright © 2020 by 宇智波Akali 目录 文章目录 第1章 J ...

  4. Java IO 字节流与字符流 (三)

    概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 ...

  5. java.IO字节流和字符流详解

    IO流的分类 在学习字节流和字符流之前因该先学习IO流的分类,效果会更好 有多种分类方式: 一种方式是按照流的方向进行分类: 以内存作为参照物, 往内存中去,叫做输入(Input).或者叫做读(Rea ...

  6. 四十、Java中字节流和字符流介绍和区别

    @Author:Runsen @Date:2020/6/6 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

  7. Java中字节流和字符流的比较(转)

    字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操 ...

  8. Java SE 学习记录——进阶版11

    @学习记录 开始学习Java 遵从同学的指导,从Java se开始学习 黑马的JavaSE零基础入门[网络编程] 第一章 网络编程入门 1.1 软件结构 22-02 软件结构 1.2 网络通信协议 2 ...

  9. JAVA SE 学习路径

    基础入门 环境配置 语句基础 字符串 数组 方法 常用类 Math StringBuilder.StringBuffer Date.SimpleDateFormat.Calendar 面向对象 类和对 ...

最新文章

  1. oracle 错误: ORA-12899:始终提示字段太大
  2. Apache Subversion command line tools下载地址 svn命令行客户端
  3. 乔布斯亲笔签名的Apple II手册 拍卖了511万元
  4. 《数据结构》—— 串,KMP模式算法(转载)
  5. 【ArcGIS微课1000例】0021:ArcToolBox工具箱功能与环境概述
  6. angularjs 表单验证 和 页面初始化闪烁
  7. eas之Uuid和BOSUuid 区别
  8. [转载] python oct_Python oct()
  9. Python Ubuntu 获取进程信息
  10. python 趋势线计算式_怎么将趋势线公式编辑成计算公式
  11. 防止linux子系统关闭,Linux关闭selinux安全子系统的方法
  12. 在读服务器端的备份说明文件错误,3dmax保存文件时出错,提示“无法创建备份文件”的原因和解决方法...
  13. origin数据平滑_origin怎样平滑曲线 看完你就会了
  14. 基于Java的资产管理系统的设计与实现
  15. Colibri 片段化学空间的兴起
  16. IDEA改变文件夹显示方式
  17. Android异常与性能优化相关问题及解决办法
  18. Cobalt Strike 域内渗透
  19. STORJ 有实际应用
  20. 【爬虫】 Squid 3.5.20 安装与配置 高匿代理

热门文章

  1. JMeter和JMeterPlugin的下载安装
  2. 将课程中的所有动手动脑的问题以及课后实验性的问题,整理成一篇文档,以博客形式发表在博客园...
  3. 第一讲 网络安全概述笔记
  4. Java数据结构--有序表
  5. Internet Explorer 8 使用技巧(2):加速器
  6. Windows Server 2012 R2/2016/2019无法安装.NET Framework 3.5.1或语言包的解决方法
  7. 数据库分库分表和带来的唯一ID、分页查询问题的解决
  8. 如何使用npm重新安装应用程序的依赖项?
  9. 将Iterable转换为Collection的简便方法
  10. 声明一个const数组