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,一经查实,立即删除!

相关文章

初出茅庐的小李博客之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学习&…

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

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

stm32 使用18B20 测试温度

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

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

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

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

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

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

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

单臂路由与三层交换机

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

电脑中环境变量的设置方法

环境变量是在操作系统中一个具有特定名字的对象&#xff0c;它包含了一个或者多个应用程序所将使用到的信息。例如Windows和DOS操作系统中的path环境变量&#xff0c;当要求系统运行一个程序而没有告诉它程序所在的完整路径时&#xff0c;系统除了在当前目录下面寻找此程序外&a…

从赋码、防窜到私域营销,爱创科技助力西卡德高驶入发展快车道

在家居建材行业&#xff0c;西卡德高是一个绕不开的品牌。在瓷砖胶、美缝剂、防水等领域&#xff0c;西卡德高甚至一度成为这些细分产品的代名词。西卡德高的销售渠道以零售为主&#xff0c;其80%的产品是通过全国3000多个经销商、3000多家专卖店、4000多个装修师傅社群以及近2…

class_2:Java概念 java se ee me jdk jre jvm

一、什么是Java&#xff1f; Java是一门面向对象的编程语言&#xff0c;不仅吸收了C语言的各种优点&#xff0c;还摒弃了C里难以理解的多继承、指针等概念&#xff0c;因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表&#xff0c;极好地…

JDK 9 模块化系统 (Module System) 和 多版本兼容 Jar (Multi-Release Jar)

博文目录 文章目录 Module System原因JDK 模块化模块描述文件关键字 启用模块化测试结论 Multi-Release jar (MRJAR)原因原理结论用 IDEA 创建多版本兼容 Jar项目结构pom.xml测试 Module System 原因 Java 9引入了模块化系统的主要原因是为了解决Java平台面临的复杂性和可维…

C++中STL的容器vector

文章目录 什么是vectorvector与普通顺序表不同的点 vector的成员函数operatoroperator[]begin与end与iteratorsize()capacityresizeemptyreservepush_backpop_backinserteraseswapclear成员变量 总结 什么是vector vector&#xff1a;是数据结构里面的顺序表&#xff0c;开辟一…

【LeetCode刷题】数组篇2

&#x1f387;数组中等题Part &#x1f308; 开启LeetCode刷题之旅 &#x1f308; 文章目录 &#x1f387;数组中等题Part&#x1f370;229.多数元素II&#x1f451;思路分析1.哈希表法2.摩尔投票法(进阶) &#x1f370;15.三数之和&#x1f451;思路分析1.排序双指针 &#x…

音乐曲谱软件Guitar Pro 8.1.1 破解版下载和网盘补丁

Guitar Pro 8.1.1 for Mac 中文破解版是一款功能强大的音乐曲谱软件&#xff0c;非常适合学习如何玩&#xff0c;改进技巧&#xff0c;重现喜爱的歌曲或陪伴自己。可以帮助我们进行吉他的学习、绘谱与创作&#xff0c;它包含了几乎所有的吉他现有指法及音色&#xff0c;在做弹拨…

角谷定理 C语言xdoj32

角谷定理定义如下&#xff1a; 对于一个大于1的整数n&#xff0c;如果n是偶数&#xff0c;则n n / 2。如果n是奇数&#xff0c;则n 3 * n 1&#xff0c;反复操作后&#xff0c;n一定为1。 例如输入22的变化过程&#xff1a; 22 ->11 -> 34 -> 17 -> 52 -> 26 …

电源小白入门学习3——电源系统常见元件选型MOS管、二极管、电感篇

电源小白入门学习3——电源系统常见元件选型MOS管、二极管、电感篇 MOS管二极管电感 书接上文&#xff0c;上一期我们讲了电阻、电容选型中需要注意的事项&#xff0c;下面我们接着来介绍MOS管和二极管。 MOS管 关于MOS管的基本原理和内部的一些结构&#xff0c;PN结、半导体的…

FPGA 低延时 TCP UDP IP协议栈兼容1G 10G 25G MAC

在计算和数据中心、军事和航天、政府、仪器与测量、金融服务和广播和视频等行业&#xff0c;需要高可靠性的硬件和软件产品&#xff0c;帮助客户更快地开发部署新一代产品&#xff0c;减少技术和市场风险&#xff0c;我司研发的低延迟TCP/IP的IP核的传输速率高于传统网口&#…

uni-app 设置当前page界面进入直接变为横屏模式

首先 我们打开项目的 manifest.json 在左侧导航栏中找到 源码视图 然后找到 app-plus 配置 在下面加上 "orientation": [//竖屏正方向"portrait-primary",//竖屏反方向"portrait-secondary",//横屏正方向"landscape-primary",//横屏…

99、NeRF ray space

CG相机模型 在图形学中最常用的相机模型的原理和小孔成像是类似的。 不同之处在于&#xff0c;如上图&#xff0c;小孔成像得到的图像是倒立的&#xff0c;但是我们希望得到的图像是正向的&#xff0c;因此&#xff0c;我们选择小孔前成像。 从 3D 到 2D 的投影&#xff0c;…