File类与常用IO流第六章——使用try...catch...finally处理流中的异常
在JDK1.7之前:
1 package com.itheima.demo06.trycatch;
2
3 import java.io.FileWriter;
4 import java.io.IOException;
5
6 /*
7 在jdk1.7之前使用try catch finally 处理流中的异常
8 格式:
9 try{
10 可能会产出异常的代码
11 }catch(异常类变量 变量名){
12 异常的处理逻辑
13 }finally{
14 一定会指定的代码
15 资源释放
16 }
17 */
18 public class Demo01TryCatch {
19 public static void main(String[] args) {
20 //提高变量fw的作用域,让finally可以使用
21 //变量在定义的时候,可以没有值,但是使用的时候必须有值
22 //fw = new FileWriter("09_IOAndProperties\\g.txt",true); 执行失败,fw没有值,fw.close会报错
23 FileWriter fw = null;
24 try{
25 //可能会产出异常的代码
26 fw = new FileWriter("w:\\09_IOAndProperties\\g.txt",true);
27 for (int i = 0; i <10 ; i++) {
28 fw.write("HelloWorld"+i+"\r\n");
29 }
30 }catch(IOException e){
31 //异常的处理逻辑
32 System.out.println(e);
33 }finally {
34 //一定会指定的代码
35 //创建对象失败了,fw的默认值就是null,null是不能调用方法的,会抛出NullPointerException,需要增加一个判断,不是null在把资源释放
36 if(fw!=null){
37 try {
38 //fw.close方法声明抛出了IOException异常对象,所以我们就的处理这个异常对象,要么throws,要么try catch
39 fw.close();
40 } catch (IOException e) {
41 e.printStackTrace();
42 }
43 }
44
45 }
46 }
47 }
JDK1.7:
1 import java.io.FileInputStream;
2 import java.io.FileOutputStream;
3 import java.io.IOException;
4
5 /*
6 JDK7的新特性
7 在try的后边可以增加一个(),在括号中可以定义流对象
8 那么这个流对象的作用域就在try中有效
9 try中的代码执行完毕,会自动把流对象释放,不用写finally
10 格式:
11 try(定义流对象;定义流对象....){
12 可能会产出异常的代码
13 }catch(异常类变量 变量名){
14 异常的处理逻辑
15 }
16 */
17 public class Demo02JDK7 {
18 public static void main(String[] args) {
19 try(//1.创建一个字节输入流对象,构造方法中绑定要读取的数据源
20 FileInputStream fis = new FileInputStream("c:\\1.jpg");
21 //2.创建一个字节输出流对象,构造方法中绑定要写入的目的地
22 FileOutputStream fos = new FileOutputStream("d:\\1.jpg");){
23
24 //可能会产出异常的代码
25 //一次读取一个字节写入一个字节的方式
26 //3.使用字节输入流对象中的方法read读取文件
27 int len = 0;
28 while((len = fis.read())!=-1){
29 //4.使用字节输出流中的方法write,把读取到的字节写入到目的地的文件中
30 fos.write(len);
31 }
32
33 }catch (IOException e){
34 //异常的处理逻辑
35 System.out.println(e);
36 }
37
38
39 }
40 }
JDK1.9:
1 import java.io.FileInputStream;
2 import java.io.FileOutputStream;
3 import java.io.IOException;
4
5 /*
6 JDK9新特性
7 try的前边可以定义流对象
8 在try后边的()中可以直接引入流对象的名称(变量名)
9 在try代码执行完毕之后,流对象也可以释放掉,不用写finally
10 格式:
11 A a = new A();
12 B b = new B();
13 try(a,b){
14 可能会产出异常的代码
15 }catch(异常类变量 变量名){
16 异常的处理逻辑
17 }
18 */
19 public class Demo03JDK9 {
20 public static void main(String[] args) throws IOException {
21 //1.创建一个字节输入流对象,构造方法中绑定要读取的数据源
22 FileInputStream fis = new FileInputStream("c:\\1.jpg");
23 //2.创建一个字节输出流对象,构造方法中绑定要写入的目的地
24 FileOutputStream fos = new FileOutputStream("d:\\1.jpg");
25
26 try(fis;fos){
27 //一次读取一个字节写入一个字节的方式
28 //3.使用字节输入流对象中的方法read读取文件
29 int len = 0;
30 while((len = fis.read())!=-1){
31 //4.使用字节输出流中的方法write,把读取到的字节写入到目的地的文件中
32 fos.write(len);
33 }
34 }catch (IOException e){
35 System.out.println(e);
36 }
37
38 //fos.write(1);//Stream Closed
39
40 }
41 }
File类与常用IO流第六章——使用try...catch...finally处理流中的异常的更多相关文章
- File类与常用IO流第四章——IO字节流
一切文件在存储时,都是以二进制数字的形式保存的,都是一个一个字节.无论使用什么样的流对象,底层传输的始终是二进制数据. 字节输出流 OutputStream java.io.OutputStream ...
- File类与常用IO流第一章File类
第一章:File类 一.1个重点单词: file:文件:directory:文件夹/目录:path:路径(绝对路径:absolutePath) 二.4个静态成员变量: 1.static String ...
- File类与常用IO流第九章——转换流
第九章.转换流 字节编码和字符集 编码:按照某种规则将字符以二进制存储到计算机中. 解码:将存储在计算机中的二进制数按照某种规则解析显示出来. 字符编码:Character Encoding ,就是一 ...
- File类与常用IO流第八章——缓冲流
第八章.缓冲流 缓冲流概述 缓冲流,也叫高效流,是对4个基本的FileXxx流的增强.按照数据类型分为4类: 输入缓冲流 输出缓冲流 字节缓冲流 BufferedInputStream Buffe ...
- File类与常用IO流第七章——Properties集合
Properties概述 java.util.Properties extends Hashtable<k,v> implements Map<k,v> Properties类 ...
- File类与常用IO流第五章——IO字符流
字符流,只能操作文本文件,不能操作图片.视频等非文本文件 字符输入流 java.io.Reader 字符输入流中一些共性的成员方法 int read():读取单个字符并返回. int read(cha ...
- File类与常用IO流第二章过滤器
在第一章中,有一个练习使用递归搜索文件 1 public static void main(String[] args) { 2 File f=new File("E:\\aaa" ...
- File类与常用IO流第十一章——打印流
第十一章.打印流 概述:java.io.PrintStream extends OutputStream,为其他输出流添加了功能,使题目能够方便的打印各种数据值表示形式. 特点: 只负责数据的输出,不 ...
- File类与常用IO流第十章——序列化流
第十章.序列化流 序列化流和反序列化流概述 序列化:用一个字节序列表示一个对象,该字节序列包含该对象的数据.对象的类型和对象中存储的属性等等信息.字节序列写出到文件后,相当于文件中持久保存了一个对象的 ...
随机推荐
- CVD和ALD薄膜沉积技术应用领域
CVD和ALD薄膜沉积技术应用领域 显示 用于OLED.QD-OLED.甚至未来QLED的薄膜封装,通过有机/无机叠层结构的保护,水汽渗透率WVTR可降至10-5g/m2/day,保证OLED或者量子 ...
- 使用JavaScript获取url(request)中的参数
这次是使用JavaScript来获取url(request)中的参数 在日常页面编写的过程中为了方便操作在<script>中通过使用window.location.href="要 ...
- 单点突破:Set
HashSet HashSet存放的是散列值,它是按照元素的散列值来存取元素的. 元素的散列值通过hashCode方法计算 HashSet通过判断两个元素的Hash值是否相等,如果相等就会用equal ...
- 四、SSL虚拟证书
沿用练习三,配置基于加密网站的虚拟主机,实现以下目标: 域名为www.c.com 该站点通过https访问 通过私钥.证书对该站点所有数据加密 4.2 方案 源码安装Nginx时必须使用--with- ...
- 【NX二次开发】调整视图大小
调整视图大小 tag_t tagView; UF_VIEW_ask_work_view(&tagView); UF_VIEW_fit_view(tagView, 0.7);//if NULL_ ...
- canal+mysql+kafka实时数据同步安装、配置
canal+mysql+kafka安装配置 概述 简介 canal译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费. 基于日志增量订阅和消费的业务包括 数 ...
- 一篇文章带你吃透,Java界最神秘技术ClassLoader
ClassLoader 是 Java 届最为神秘的技术之一,无数人被它伤透了脑筋,摸不清门道究竟在哪里.网上的文章也是一篇又一篇,经过本人的亲自鉴定,绝大部分内容都是在误导别人.本文我带读者彻底吃透 ...
- 第三方模块npm
npm介绍 npm 全名 node package manager node包管理工具,增删查改 如果npm操作太慢,可以安装npm镜像 npm的下载 比如全局下载一个jquery文件,全局下载的 ...
- SystemVerilog 中的相等运算符:== or === ?
1. 四值逻辑的逻辑运算 在对比SystemVerilog中的相等运算符之前,先来看一下三种最基本的逻辑运算符,下文中以·表示与运算,以+表示或运算,以'表示非运算.我们都知道在逻辑代数中,只有0和1 ...
- 37、mysql数据库(dcl)
在数据库中参考:"12.创建mysql用户及赋予用户权限"文件.