java IO流(上)

1.字节流

1.1 IO流概述和分类【理解】

1.IO流介绍

  • IO:输入/输出(Input/Output)
  • 流:是一种抽象概念,是对数据传输的总称.也就是说数据在设备间的传输称为流,流的本质是数据传输
  • IO流就是用来处理设备间数据传输问题的.常见的应用: 文件复制; 文件上传; 文件下载

2.学习IO流的目的:

  • 将数据写到文件中,实现数据永久化存储
  • 读取文件中已经存在的数据

3.IO流的分类

  • 按照数据的流向
    • 输入流:读数据
    • 输出流:写数据
  • 按照数据类型来分
    • 字节流
      • 字节输入流
      • 字节输出流
    • 字符流
      • 字符输入流
      • 字符输出流

IO流的分类

4.IO流的使用场景

  • 如果操作的是纯文本文件,优先使用字符流
  • 如果操作的是图片、视频、音频等二进制文件,优先使用字节流
  • 如果不确定文件类型,优先使用字节流.字节流是万能的流

1.2字节流写数据【应用】

1.字节流抽象基类

  • InputStream:这个抽象类是表示字节输入流的所有类的超类
  • OutputStream:这个抽象类是表示字节输出流的所有类的超类
  • 子类名特点:子类名称都是以其父类名作为子类名的后缀

2.字节输出流

  • FileOutputStream(String name):创建文件输出流以指定的名称写入文件

3.使用字节输出流写数据的步骤

  1. 创建字节输出流对象(调用系统功能创建了文件,创建字节输出流对象,让字节输出流对象指向文件)
  2. 调用字节输出流对象的写数据方法
  3. 释放资源(关闭此文件输出流并释放与此流相关联的任何系统资源)
  • 示例代码

    public class FileOutputStreamDemo01 {public static void main(String[] args) throws IOException {//创建字节输出流对象/*注意点:1.如果文件不存在,会帮我们创建2.如果文件存在,会把文件清空*///FileOutputStream(String name):创建文件输出流以指定的名称写入文件FileOutputStream fos = new FileOutputStream("myByteStream\\fos.txt");//void write(int b):将指定的字节写入此文件输出流fos.write(97);
    //        fos.write(57);
    //        fos.write(55);//最后都要释放资源//void close():关闭此文件输出流并释放与此流相关联的任何系统资源。fos.close();}
    }
    

1.3字节流写数据的三种方式【应用】

1.写数据的方法分类

方法名说明
void write(int b)将指定的字节写入此文件输出流 一次写一个字节数据
void write(byte[] b)将 b.length字节从指定的字节数组写入此文件输出流 一次写一个字节数组数据
void write(byte[] b, int off, int len)将 len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流 一次写一个字节数组的部分数据

2.示例代码

public class FileOutputStreamDemo02 {public static void main(String[] args) throws IOException {//FileOutputStream(String name):创建文件输出流以指定的名称写入文件FileOutputStream fos = new FileOutputStream("myByteStream\\fos.txt");//FileOutputStream(File file):创建文件输出流以写入由指定的 File对象表示的文件
//        FileOutputStream fos = new FileOutputStream(new File("myByteStream\\fos.txt"));//void write(int b):将指定的字节写入此文件输出流
//        fos.write(97);
//        fos.write(98);
//        fos.write(99);
//        fos.write(100);
//        fos.write(101);//        void write(byte[] b):将 b.length字节从指定的字节数组写入此文件输出流
//        byte[] bys = {97, 98, 99, 100, 101};//byte[] getBytes():返回字符串对应的字节数组byte[] bys = "abcde".getBytes();
//        fos.write(bys);//void write(byte[] b, int off, int len):将 len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流
//        fos.write(bys,0,bys.length);fos.write(bys,1,3);//释放资源fos.close();}
}

在这里插入图片描述
在这里插入图片描述

1.4字节流写数据的两个小问题【应用】

1.字节流写数据如何实现换行

  • windows:\r\n
  • linux:\n
  • mac:\r

2.字节流写数据如何实现追加写入

  • public FileOutputStream(String name,boolean append)
  • 创建文件输出流以指定的名称写入文件。如果第二个参数为true ,则字节将写入文件的末尾而不是开头

3.示例代码

public class FileOutputStreamDemo03 {public static void main(String[] args) throws IOException {//创建字节输出流对象
//        FileOutputStream fos = new FileOutputStream("myByteStream\\fos.txt");FileOutputStream fos = new FileOutputStream("myByteStream\\fos.txt",true);//写数据for (int i = 0; i < 10; i++) {fos.write("hello".getBytes());fos.write("\r\n".getBytes());}//释放资源fos.close();}
}

1.5字节流写数据加异常处理【应用】

  • 异常处理格式

    • try-catch-finally

      try{可能出现异常的代码;
      }catch(异常类名 变量名){异常的处理代码;
      }finally{执行所有清除操作;
      }
      
    • finally特点

      • 被finally控制的语句一定会执行,除非JVM退出
  • 示例代码

    public class FileOutputStreamDemo04 {public static void main(String[] args) {//加入finally来实现释放资源FileOutputStream fos = null;try {fos = new FileOutputStream("myByteStream\\fos.txt");fos.write("hello".getBytes());} catch (IOException e) {e.printStackTrace();} finally {if(fos != null) {try {fos.close();} catch (IOException e) {e.printStackTrace();}}}}
    }
    

1.6字节流读数据(一次读一个字节数据)【应用】

1.字节输入流

  • FileInputStream(String name):通过打开与实际文件的连接来创建一个FileInputStream,该文件由文件系统中的路径名name命名

2.字节输入流读取数据的步骤

  • 创建字节输入流对象
  • 调用字节输入流对象的读数据方法
  • 释放资源

3.示例代码

public class FileInputStreamDemo01 {public static void main(String[] args) throws IOException {//创建字节输入流对象//FileInputStream(String name)FileInputStream fis = new FileInputStream("myByteStream\\fos.txt");int by;/*fis.read():读数据by=fis.read():把读取到的数据赋值给byby != -1:判断读取到的数据是否是-1*/while ((by=fis.read())!=-1) {System.out.print((char)by);}//释放资源fis.close();}
}

1.7字节流复制文件【应用】

  • 案例需求

    ​ 把“E:\itcast\窗里窗外.txt”复制到模块目录下的“窗里窗外.txt” (文件可以是任意文件)

  • 实现步骤

    • 复制文本文件,其实就把文本文件的内容从一个文件中读取出来(数据源),然后写入到另一个文件中(目的地)

    • 数据源:

      ​ E:\itcast\窗里窗外.txt — 读数据 — InputStream — FileInputStream

    • 目的地:

      ​ myByteStream\窗里窗外.txt — 写数据 — OutputStream — FileOutputStream

  • 代码实现

    public class CopyTxtDemo {public static void main(String[] args) throws IOException {//根据数据源创建字节输入流对象FileInputStream fis = new FileInputStream("E:\\itcast\\窗里窗外.txt");//根据目的地创建字节输出流对象FileOutputStream fos = new FileOutputStream("myByteStream\\窗里窗外.txt");//读写数据,复制文本文件(一次读取一个字节,一次写入一个字节)int by;while ((by=fis.read())!=-1) {fos.write(by);}//释放资源fos.close();fis.close();}
    }
    

1.8字节流读数据(一次读一个字节数组数据)【应用】

  • 一次读一个字节数组的方法

    • public int read(byte[] b):从输入流读取最多b.length个字节的数据
    • 返回的是读入缓冲区的总字节数,也就是实际的读取字节个数
  • 示例代码

    public class FileInputStreamDemo02 {public static void main(String[] args) throws IOException {//创建字节输入流对象FileInputStream fis = new FileInputStream("myByteStream\\fos.txt");byte[] bys = new byte[1024]; //1024及其整数倍int len;//循环读取while ((len=fis.read(bys))!=-1) {System.out.print(new String(bys,0,len));}//释放资源fis.close();}
    }
    

1.9字节流复制文件【应用】

  • 案例需求

    ​ 把“E:\itcast\mn.jpg”复制到模块目录下的“mn.jpg” (文件可以是任意文件去)

  • 实现步骤

    • 根据数据源创建字节输入流对象
    • 根据目的地创建字节输出流对象
    • 读写数据,复制图片(一次读取一个字节数组,一次写入一个字节数组)
    • 释放资源
  • 代码实现

    public class CopyJpgDemo {public static void main(String[] args) throws IOException {//根据数据源创建字节输入流对象FileInputStream fis = new FileInputStream("E:\\itcast\\mn.jpg");//根据目的地创建字节输出流对象FileOutputStream fos = new FileOutputStream("myByteStream\\mn.jpg");//读写数据,复制图片(一次读取一个字节数组,一次写入一个字节数组)byte[] bys = new byte[1024];int len;while ((len=fis.read(bys))!=-1) {fos.write(bys,0,len);}//释放资源fos.close();fis.close();}
    }
    

2.字节缓冲流

2.1字节缓冲流构造方法【应用】

  • 字节缓冲流介绍

    • BufferOutputStream:该类实现缓冲输出流.通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用
    • BufferedInputStream:创建BufferedInputStream将创建一个内部缓冲区数组.当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节
  • 构造方法:

    方法名说明
    BufferedOutputStream(OutputStream out)创建字节缓冲输出流对象
    BufferedInputStream(InputStream in)创建字节缓冲输入流对象
  • 为什么构造方法需要的是字节流,而不是具体的文件或者路径呢?

    字节缓冲流仅仅提供缓冲区,而真正的读写数据还得依靠基本的字节流对象进行操作

  • 示例代码

    public class BufferStreamDemo {public static void main(String[] args) throws IOException {//字节缓冲输出流:BufferedOutputStream(OutputStream out)BufferedOutputStream bos = new BufferedOutputStream(new 				                                       FileOutputStream("myByteStream\\bos.txt"));//写数据bos.write("hello\r\n".getBytes());bos.write("world\r\n".getBytes());//释放资源bos.close();//字节缓冲输入流:BufferedInputStream(InputStream in)BufferedInputStream bis = new BufferedInputStream(new                                                          FileInputStream("myByteStream\\bos.txt"));//一次读取一个字节数据
    //        int by;
    //        while ((by=bis.read())!=-1) {
    //            System.out.print((char)by);
    //        }//一次读取一个字节数组数据byte[] bys = new byte[1024];int len;while ((len=bis.read(bys))!=-1) {System.out.print(new String(bys,0,len));}//释放资源bis.close();}
    }
    

2.2字节缓冲流复制视频【应用】

  • 案例需求

    把“E:\itcast\字节流复制图片.avi”复制到模块目录下的“字节流复制图片.avi”

  • 实现步骤

    • 根据数据源创建字节输入流对象
    • 根据目的地创建字节输出流对象
    • 读写数据,复制视频
    • 释放资源
  • 代码实现

    public class CopyAviDemo {public static void main(String[] args) throws IOException {//复制视频
    //        method1();method2();}//字节缓冲流一次读写一个字节数组public static void method2() throws IOException {BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\itcast\\字节流复制图片.avi"));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("myByteStream\\字节流复制图片.avi"));byte[] bys = new byte[1024];int len;while ((len=bis.read(bys))!=-1) {bos.write(bys,0,len);}bos.close();bis.close();}//字节缓冲流一次读写一个字节public static void method1() throws IOException {BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\itcast\\字节流复制图片.avi"));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("myByteStream\\字节流复制图片.avi"));int by;while ((by=bis.read())!=-1) {bos.write(by);}bos.close();bis.close();}}
    

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

《科技之巅2》序——机器智能数据智能:工具之王

原文链接 “凡是过去&#xff0c;皆为序曲。”——莎士比亚 通过不断发明工具&#xff0c;人类科技指数级进化。语言汇聚原始部落&#xff0c;马镫开启了中世纪的欧洲文明&#xff0c;“高产种子”引发人口爆炸&#xff0c;蒸汽机创造工业文明&#xff0c;大规模集成电路激活数…

一、java面向对象基础

1. 类和对象 面向对象和面向过程的思想对比 : ​ 面向过程 &#xff1a; 是一种以过程为中心的编程思想&#xff0c;实现功能的每一步&#xff0c;都是自己实现的 ​ 面向对象 &#xff1a; 是一种以对象为中心的编程思想&#xff0c;通过指挥对象实现具体的功能 1.1 类和对…

pythom打包文件太大_从SQL注入到整站打包与本地搭建

一、前言如题&#xff0c;由于是在已知有一处sql注入的情况下才接手进行的后续操作&#xff0c;因此前面信息搜集则一笔带过。二、信息搜集目标是个本地的传销站点其大致信息为IISASP.NET安全狗、腾讯云。三、Bypass Sql3.1 Fuzz空格 error 加号 未拦截 等号 er…

二、常用API——String类和StringBuilder类

1.API 1.1 API概述-帮助文档的使用 什么是API ​ API (Application Programming Interface) &#xff1a;应用程序编程接口 java中的API ​ 指的就是 JDK 中提供的各种功能的 Java类&#xff0c;这些类将底层的实现封装了起来&#xff0c;我们不需要关心这些类是如何实现的&a…

iphone复制不能全选_忘记Apple ID密码,如何直接在 iPhone 上更改?

最近有不少同学问我&#xff0c;如果忘记了 Apple ID 的密码&#xff0c;怎么能直接在 iPhone 上修改&#xff1f;别急&#xff0c;我现在就教你如果之前已经在 iPhone 上登录过你的账户&#xff0c;并且已经将 iPhone 设置为「受信任设备」&#xff0c;那么就可以直接在 iPhon…

nginx 上传 文件超时设置_Nginx在高并发下的性能优化点!有这篇就够了!

点击上方“java进阶架构师”&#xff0c;选择右上角“置顶公众号”20大进阶架构专题每日送达前面几周&#xff0c;讲过Nginx的日志配置&#xff1a;Nginx | 超详细&#xff01;Nginx 日志配置实践&#xff0c;然后也讲了Nginx的进程模型&#xff0c;底层原理等&#xff1a;Ngin…

四、java面向对象高级——分类和分包思想、static关键字

1.案例驱动模式 1.1案例驱动模式概述 (理解) 通过我们已掌握的知识点,先实现一个案例,然后找出这个案例中,存在的一些问题,在通过新知识点解决问题 1.2案例驱动模式的好处 (理解) 解决重复代码过多的冗余,提高代码的复用性解决业务逻辑聚集紧密导致的可读性差,提高代码的可…

五、java面向对象高级——java中的继承和抽象类

1. 继承 1.1 继承的实现&#xff08;掌握&#xff09; 继承的概念 继承是面向对象三大特征之一&#xff0c;可以使得子类具有父类的属性和方法&#xff0c;还可以在子类中重新定义&#xff0c;以及追加属性和方法 实现继承的格式 继承通过extends实现格式&#xff1a;class 子…

万丰科技机器人排名_2020年全国机器人企业数量大排名(省份榜|9月)

点击上方兔子岛关注浩然哥原创不易 欢迎分享转载请注明出处作者&#xff1a;浩然哥2020年全国机器人企业数量大排名省份榜|9月大家好&#xff0c;《全国机器人企业数量大排名》又和大家见面了。本期是2020年省份榜的9月份榜单。2020年年底了&#xff0c;近期7月、9月、11月&am…

php函数scandir_PHP函数glob:扫描目录文件更好的方式

如果想要扫描一个目录下的文件&#xff0c;以及目录&#xff0c;应该怎么做呢。大家第一印象&#xff0c;可能是 scandir &#xff0c;这个函数用来扫描给定路径下的文件列表&#xff0c;用法示例如下&#xff1a;array scandir ( string $directory [, int $sorting_order [, …

可信计算 沈昌祥_沈昌祥院士:用主动免疫可信计算构筑车联网安全防线

“智能网联汽车如果没有网络安全&#xff0c;就相当于一个没有免疫系统的人&#xff0c;因此要在智能汽车方面构筑自主可控、安全可信的产业链。” 在6月24日举办的第四届世界智能大会——新一代汽车智能化发展峰会上&#xff0c;中国工程院院士沈昌祥如是说。文&#xff5c;田…

七、java面向对象高级——内部类、lambda表达式及常用API

1.内部类 1.1 内部类的基本使用&#xff08;理解&#xff09; 内部类概念 在一个类中定义一个类。举例&#xff1a;在一个类A的内部定义一个类B&#xff0c;类B就被称为内部类 内部类定义格式 格式&举例&#xff1a; /*格式&#xff1a;class 外部类名{修饰符 class 内部…

id jquery选择器 开头_HTML的id选择器类选择器

一、问题&#xff1a;我们前面讲了标签选择器有一个缺陷就是它不加选择的把所有相同的标签全都变成统一样式&#xff0c;这对于我们个性化定制产生了阻碍&#xff0c;因此我们便引出了id选择器&#xff0c;来进行特别指定进行配置样式二、id选择器1.定义&#xff1a;根据指定的…

八、java中常见API及java异常处理

1.包装类 1.1 基本类型包装类&#xff08;记忆&#xff09; 基本类型包装类的作用 将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据 常用的操作之一&#xff1a;用于基本数据类型与字符串之间的转换 基本类型对应的包装类 基本数据类型包装类by…

弹出并点击弹框关闭 自定义toast_关于别名配置使用弹框交互应用的思考

温馨提示如果你喜欢本文&#xff0c;请帮助我将这篇文章分享到朋友圈&#xff0c;喜欢我的文章&#xff0c;可以关注我&#xff0c;我们一起交流。本文&#xff1a;2052字 | 估计阅读&#xff1a;6分钟我在思考功能实现需求的时候&#xff0c;会斟酌和判断使用什么样的功能和交…

POJ 1189 钉子和小球

题目链接&#xff1a;http://poj.org/problem?id1189 dp 可以知道一共有2^n条路径&#xff0c;则设顶点有2^n个球&#xff0c;若当前为*则向左右的球各有一半&#xff1b;若为.&#xff0c;则球全部掉入正下方。 1 #include<iostream>2 #include<cstring>3 #inclu…

MySQL学习笔记(总结)

一、MySQL课程内容 对应视频教程&#xff1a;千锋教育JavaWeb基础入门到实战教程&#xff0c;javaSE基础进阶java web快速入门教程完整版_哔哩哔哩_bilibili 1.1 数据库介绍 数据库概念术语介绍 1.2 MySQL数据库 下载、安装、配置、卸载MySQL客户端工具的安装及使用 1.3 …

按群计数10以内_【乐玩乐学】有趣的计数活动

_有趣的计数活动写给爸爸妈妈的话&#xff1a;时间、日期、体重、地址世界上到处都是各种各样的数字。有了数字我们的交流才变得更加通畅。但是在这些方便的数字出现之前&#xff0c;生活在很久很久以前的人们是怎么数数、怎么表示数量的呢&#xff1f;他们用的就是手、脚等身体…

数据结构学习笔记总结(部分内容后续会更新)

第一章 绪论 1.1 数据结构的研究内容 1.2 基本概念和术语 1.2.1 数据、数据元素、数据项和数据对象 1.数据 数据&#xff1a;是能够输入计算机且能被计算机处理的各种符号的集合 信息的载体是对客观事物符号化的表示能够被计算机识别、存储和加工 包括&#xff1a; 数值型的…

git 怎么拉去分支代码_Git使用技巧1——代码写错分支了怎么办?

工欲善其事&#xff0c;必先利其器。前言Git的本质git是一个版本控制工具&#xff0c;一切以版本控制为中心&#xff0c;版本即每一次commit&#xff0c;其实分支是指向commit的&#xff0c;HEAD也是指向某一次提交的&#xff0c;HEAD其实指向的就是当前分支的最近一次commit&a…