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流第十章——序列化流
第十章.序列化流 序列化流和反序列化流概述 序列化:用一个字节序列表示一个对象,该字节序列包含该对象的数据.对象的类型和对象中存储的属性等等信息.字节序列写出到文件后,相当于文件中持久保存了一个对象的 ...
随机推荐
- ALD技术产品形态
ALD技术产品形态 原子层沉积研究设备 TFS 200是适合科学研究和企业研发的最灵活的ALD平台.倍耐克 TFS 200专门设计用于多用户研究环境中把可能发生的交叉污染降至最低. 大量的可用选项和升 ...
- 向Relay添加算子
向Relay添加算子 为了在Relay IR中使用TVM算子,需要在Relay中注册算子,以确保将其集成到Relay的类型系统中. 注册算子需要三个步骤: 使用RELAY_REGISTER_OPC + ...
- ResNet网络的训练和预测
ResNet网络的训练和预测 简介 Introduction 图像分类与CNN 图像分类 是指将图像信息中所反映的不同特征,把不同类别的目标区分开来的图像处理方法,是计算机视觉中其他任务,比如目标检测 ...
- CUDA 11功能展示
CUDA 11功能展示 CUDA 11 Features Revealed 新的NVIDIA A100 GPU基于NVIDIA安培GPU架构,实现了加速计算的最大一代飞跃.A100 GPU具有革命性的 ...
- 如何使用Nsight System?
如何使用Nsight System?
- 阿里面试挂了,就因为面试官说我Spring 事务管理(器)不熟练?
前言 事务管理,一个被说烂的也被看烂的话题,还是八股文中的基础股之一.但除了八股文中需要熟读并背诵的那些个传播行为之外,背后的"为什么"和核心原理更为重要. 写这篇文章之前,我 ...
- SpringBoot注解 + 详解
可以使用Ctrl + F搜索,也可以右侧目录自行检索 @SpringBootApplication 包含了@ComponentScan.@Configuration和@EnableAutoConfig ...
- 【Android编程实战】源码级免杀_Dex动态加载技术_Metasploit安卓载荷傀儡机代码复现
/文章作者:MG193.7 CNBLOG博客ID:ALDYS4 QQ:3496925334/ 在读者阅读本文章前,建议先阅读笔者之前写的一篇对安卓载荷的分析文章 [逆向&编程实战]Metasp ...
- NX二次开发】Block UI 体收集器
属性说明 属性 类型 描述 常规 BlockID String 控件ID Enable Logical 是否可操作 Group ...
- 12:media配置以及后端指定资源暴露
django需要用到的静态文件默认都是放在static目录下 而针对后期用户上传的静态文件也应该统一存储 # media配置:规定用户上传的静态文件存储位置 MEDIA_ROOT = os.path. ...