Java中的IO流①——IO流的体系、字节流、try...catch异常处理

概述


IO流的分类


IO流的体系


这四个类都是抽象类,所以需要实现类对象才能使用--->


字节流


FileInputStream-->

书写细节

代码示范

此时文件a.txt内容为abcde

使用char强转和read方法调用五次read方法-->

    public static void main(String[] args) throws IOException {/*演示:字节输入流FileInputStream实现需求:读取文件中的数据(暂时不写中文)实现步骤:创建对象读取数据释放资源*///1.创建对象FileInputStream fis = new FileInputStream("myio\\a.txt");//2.读取数据int b1 = fis.read();System.out.println((char)b1);//aint b2 = fis.read();System.out.println((char)b2);//bint b3 = fis.read();System.out.println((char)b3);//cint b4 = fis.read();System.out.println((char)b4);//dint b5 = fis.read();System.out.println((char)b5);//e//3.释放资源fis.close();}
使用char强转和read方法调用六次read方法-->最后一个值为-1
    public static void main(String[] args) throws IOException {/*演示:字节输入流FileInputStream实现需求:读取文件中的数据(暂时不写中文)实现步骤:创建对象读取数据释放资源*///1.创建对象FileInputStream fis = new FileInputStream("myio\\a.txt");//2.读取数据int b1 = fis.read();System.out.println((char)b1);//aint b2 = fis.read();System.out.println((char)b2);//bint b3 = fis.read();System.out.println((char)b3);//cint b4 = fis.read();System.out.println((char)b4);//dint b5 = fis.read();System.out.println((char)b5);//eint b6 = fis.read();System.out.println((char)b6);////3.释放资源fis.close();}
循环读取-->
 
    public static void main(String[] args) throws IOException {/*字节输入流的循环读取*///1.创建对象FileInputStream fis = new FileInputStream("myio\\a.txt");//2.循环读取int b;while ((b = fis.read()) != -1){System.out.println((char)b);}/*结果:abcde*///3.释放资源fis.close();}

FileOutputStream-->

 书写细节

代码示范

先创建一个空的txt文件:a.txt

一次写一个字节数据-->

    public static void main(String[] args) throws IOException {/*演示:字节输出流FileOutputStream实现需求:写出一段文字到本地文件中(暂时不写中文)实现步骤:创建对象写出数据释放资源*///1.创建对象//写出 输出流 OutputStreamFileOutputStream fos = new FileOutputStream("myio\\a.txt");//2.写出数据fos.write(97);//3.释放资源fos.close();}

结果-->>文件中添加了a

一次写一个字节数组数据-->

        public static void main(String[] args) throws IOException {//1.创建对象FileOutputStream fos = new FileOutputStream("myio\\a.txt");//2.写出数据byte[] bytes = {97, 98, 99, 100, 101};fos.write(bytes);//3.释放数据fos.close();}

结果-->>文件中添加了abcde

一次写一个字节数组的部分数据-->

    public static void main(String[] args) throws IOException {//1.创建对象FileOutputStream fos = new FileOutputStream("myio\\a.txt");//2.写出数据byte[] bytes = {97, 98, 99, 100, 101};fos.write(bytes,1,2);//3.释放数据fos.close();}

结果-->>文件中添加了bc

换行-->

    public static void main(String[] args) throws IOException {/*换行写:再次写出一个换行符Windows:\r\nLinux:\nMac:\r细节:在Windows操作系统中,java对回车换行进行了优化虽然完整是\r\n,但是我们写其中一个\r或者\njava也可以实现换行,因为java在底层会自动补全建议:不要省略*///1.创建对象FileOutputStream fos = new FileOutputStream("myio\\a.txt");//2.写出数据String str1 = "kankelaoyezhenshuai";byte[] bytes1 = str1.getBytes();fos.write(bytes1);//再次写出一个换行符String warp = "\r\n";byte[] bytes2 = warp.getBytes();fos.write(bytes2);String str2 = "666";byte[] bytes3 = str2.getBytes();fos.write(bytes3);//释放资源fos.close();}

结果-->>

续写-->

    public static void main(String[] args) throws IOException {/*续写:如果需要续写,打开续写开关即可开关位置:创建对象的第二个参数默认false:表示关闭续写,此时创建对象会清空文件手动传递true:表示打开续写,此时创建对象不会清空文件*///1.创建对象FileOutputStream fos = new FileOutputStream("myio\\a.txt",true);//2.写出数据String str1 = "kankelaoyezhenshuai";byte[] bytes1 = str1.getBytes();fos.write(bytes1);//再次写出一个换行符String warp = "\r\n";byte[] bytes2 = warp.getBytes();fos.write(bytes2);String str2 = "666";byte[] bytes3 = str2.getBytes();fos.write(bytes3);//释放资源fos.close();}

结果-->>

小结

练习-->文件拷贝

    public static void main(String[] args) throws IOException {//文件拷贝//核心思想:边读边写//创建对象FileInputStream fis = new FileInputStream("myio\\a.txt");FileOutputStream fos = new FileOutputStream("myio\\b.txt");//拷贝int b;while ((b = fis.read()) != -1){fos.write(b);}//规则:先开的最后关闭fos.close();fis.close();}

FileInputStream读取的问题

一次只读取一个字节导致效率慢

解决方案

字节数组返回值:获取了几个字符

读取abcde时,第三次会出现只读取e的情况,只获取了一个元素,而数组中存放了两个,只会覆盖一半,所以使用时应该加上起始索引和结束索引

代码示范


try...catch异常处理

未来在springboot框架中一般使用抛出异常,try...catch掌握即可

由于代码太过繁琐,Java做出了简化方案,提出了接口

接口:AutoCloseable

特点:特定情况下,可以自动释放资源

代码演示

基本做法-->

    public static void main(String[] args) {//创建对象FileInputStream fis = null;FileOutputStream fos = null;try {fis = new FileInputStream("myio\\a.txt");fos = new FileOutputStream("myio\\a.txt");//拷贝int len;byte[] bytes = new byte[2];while ((len = fis.read(bytes)) != -1){fos.write(bytes,0,len);}} catch (IOException e){//e.printStackTrace();} finally {//释放资源if(fos != null){try {fos.close();} catch (IOException e){e.printStackTrace();}}if(fis != null){try {fis.close();} catch (IOException e){e.printStackTrace();}}}}

JDK7方案-->

    public static void main(String[] args) {/*JDK7:IO流中捕获异常的写法try后面的小括号写创建对象的代码注意:只有实现AutoCloseable接口的类,才能在小括号中创建对象*/try(FileInputStream fis = new FileInputStream("myio\\a.txt");FileOutputStream fos = new FileOutputStream("myio\\a.txt")){//拷贝int len;byte[] bytes = new byte[2];while ((len = fis.read(bytes)) != -1){fos.write(bytes,0,len);}}catch (IOException e){e.printStackTrace();}}

JDK9方案-->

    public static void main(String[] args) throws FileNotFoundException {/*JDK9:IO流中捕获异常的写法*/FileInputStream fis = new FileInputStream("myio\\a.txt");FileOutputStream fos = new FileOutputStream("myio\\a.txt");try(fis;fos){//拷贝int len;byte[] bytes = new byte[2];while ((len = fis.read(bytes)) != -1){fos.write(bytes,0,len);}}catch (IOException e){e.printStackTrace();}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/210467.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 语言学习

整理了一下 mysql 操作语言,不是很全,部分地方也许需要修改,先放上来,有时间再慢慢完善。 一、数据库操作 连接数据库 $ sudo mysql [-h ip] -u root -p [-P 3306] 初始化数据库 $ mysql_secure_installation备份数据库 # 备…

初出茅庐的小李博客之TobudOS移植到EVB_AIoT开发板

本博客参考教程: https://atomgit.com/OpenAtomFoundation/TobudOS/blob/master/doc/TobudOS_EVB_AIoT_STM32_Guide.md 介绍一下EVB_AIoT开发板 这个开发板是由TobudOS开源社区联合意法半导体、南京厚德物联网设计的一款高性能IoT开发平台,主控芯片是S…

SystemVerilog学习(0)——目录与传送门

一、验证导论 SystemVerilog学习(1)——验证导论-CSDN博客文章浏览阅读403次。SystemVerilog自学,验证系统概述,什么是SVhttps://blog.csdn.net/apple_53311083/article/details/133953016 二、数据类型 SystemVerilog学习&…

含掩膜mask的单通道灰度图转化为COCO数据集格式标签的json文件(python)

输入:单通道的灰度图,灰度图内含掩膜mask 目标:把灰度图中的语义mask转换为COCO数据集格式的json文件 输出:COCO数据集格式的json文件 期间遇到的问题: 发现有的掩膜内部存在其他类别的掩膜,即mask内部还套…

枚举类简单使用

1、创建一个枚举 public enum DemoEnum {// 引号里面存放的是下面所创建的属性,如果不创建属性则不能输入引号里的值的NORMAL("正常"),DESTORY("废弃");private String label;private DemoEnum(String label){this.label label;}public Strin…

使用.net core MVC实现图片上传下载

今天闲来无事&#xff0c;复习复习 1、上传 上传界面 <div class"text-center"><h1 class"display-4">Welcome</h1><form method"post" enctype"multipart/form-data" asp-controller"Home" asp-ac…

<HarmonyOS主题课>三方库【课后考核】

【习题】三方库 判断题 三方组件是开发者在系统能力的基础上进行了一层具体功能的封装&#xff0c;对其能力进行拓展的工具 。 正确(True) 可以通过ohpm uninstall 指令下载指定的三方库 错误(False) lottie使用loadAnimation方法加载动画。 正确(True) 单选题 通过ohpm安…

@FunctionalInterface、Lambda表达式和方法引用

知识不回顾是会被遗忘的&#xff01; 网上看了一些相关文章&#xff0c;这里记录一下&#xff0c;仅供参考 Java语言从JDK1.8开始引入了函数式编程。 函数式编程的核心特点是&#xff0c;函数作为一段功能代码&#xff0c;可以像变量一样进行引用和传递&#xff0c;以便在有需…

stm32 使用18B20 测试温度

用18b20 测试温度是非常常用的&#xff0c;不过18B20的调试不是这么容易的&#xff0c;有些内容网上很多的&#xff0c;不再重复说了&#xff0c;我先把波形说一下&#xff0c;再说程序部分&#xff1a; 整个都温度数据的顺序是&#xff1a; 1.700uS的低电平复位并测试18B20的…

【素书学习】人生境界的四个层次

冯友兰先生认为人生境界有四个层次&#xff1a; 1、自然境界。总是依照社会习惯或本性而为&#xff0c;完全随天地运转而运转&#xff0c;无明了的目的&#xff0c;不明所做的意义。日出而作&#xff0c;日落而息&#xff0c;不会去过多地思考此外的事情。不知何为苦、何为乐&…

mfc110u.dll丢失的解决方法,mfc110u.dll丢失原因是什么?

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“mfc110u.dll文件丢失”。那么&#xff0c;mfc110u.dll是什么&#xff1f;为什么会出现丢失的情况呢&#xff1f;本文将为您详细介绍mfc110u.dll文件的含义、丢失原因以及解决方法。 首先&…

MyBatis进阶之结果集映射注解版

文章目录 注解实现结果集映射注解实现关系映射常用功能注解汇总 注解实现结果集映射 注意 配置结果集映射&#xff0c;只用看 SQL 执行结果&#xff0c;不看 SQL 语句&#xff01; 注意 由于注解在映射结果集上没有实现 <resultMap> 的 100% 功能&#xff0c;因此&#x…

LeetCode763. Partition Labels

文章目录 一、题目二、题解 一、题目 You are given a string s. We want to partition the string into as many parts as possible so that each letter appears in at most one part. Note that the partition is done so that after concatenating all the parts in orde…

java 有一个N位数字,各位加起来不超过M。

java 有一个N位数字&#xff0c;各位加起来不超过M。M<1000000 import java.util.*; //1:无需package //2: 类名必须Main, 不可修改public class Main { public static void main(String[] args) {Scanner scan new Scanner (System.in);int n scan.nextInt();int m scan…

【车载开发系列】Visio工具使用小技巧

【车载开发系列】Visio工具使用小技巧 【车载开发系列】Visio工具使用小技巧 【车载开发系列】Visio工具使用小技巧一. Word中编辑Visio技巧二. Word中插入visio图形的问题三. 总结 一. Word中编辑Visio技巧 本节主要介绍了Microsoft Word中编辑Visio图形的具体方法。 在 Word…

鸿蒙(HarmonyOS)应用开发——从网络获取数据(题目答案)

判断题 1.在http模块中&#xff0c;多个请求可以使用同一个httpRequest对象&#xff0c;httpRequest对象可以复用。 错误(False) 2.使用http模块发起网络请求后&#xff0c;可以使用destroy方法中断网络请求。 正确(True) 3.Web组件onConfirm(callback: (event?: { url: …

单臂路由与三层交换机

单臂路由 划分VLAN后同一VLAN的计算机属于同一个广播域&#xff0c;同一VLAN的计算机之间的通信是不成问题的。然而&#xff0c;处于不同VLAN的计算机即使是在同一交换机上&#xff0c;它们之间的通信也必须使用路由器。 图&#xff08;a&#xff09;是一种实现VLAN间路由的方…

人工智能原理复习

绪论 人工智能原理复习–绪论 知识表示 人工智能原理复习–知识表示&#xff08;一&#xff09; 人工智能原理复习–知识表示&#xff08;二&#xff09; 确定性推理 人工智能原理复习–确定性推理 不确定性推理 人工智能原理复习–不确定推理 搜索策略 人工智能原理复…

光伏连接器

光伏连接器 电子元器件百科 文章目录 光伏连接器前言一、光伏连接器是什么二、光伏连接器的类别三、光伏连接器的应用实例四、光伏连接器的作用原理总结前言 常用的光伏连接器类型包括MC4、MC3、Amphenol和Tyco等,它们根据连接方式、电气性能和标准规范等因素进行设计和选择…

【原创】【一类问题解决】有正定阵A,让求可逆阵R使得A=RTR(或A=RRT)的策略

【问题背景】有正定阵A&#xff0c;让求可逆阵R使得ARTR&#xff08;或ARRT&#xff09;的策略 【法一】代数法&#xff1a;转二次型配方 【实操】构造A的二次型fxTAx&#xff0c;将f在可逆变换xPy下配方为规范型yTy(即yTEyy1y2y3)〔即相应配方系数阵为P&#xff08;-1&#x…