【精通Java篇 | IO流】详讲字节流与常用方法

news2024/11/19 23:23:48

在这里插入图片描述


在这里插入图片描述



个人名片:

🐼作者简介:一名大二在校生,喜欢编程🎋
🐻‍❄️个人主页🥇:小新爱学习.
🐼个人WeChat:hmmwx53
🕊️系列专栏:🖼️

  • 零基础学Java——小白入门必备
  • 重识C语言——复习回顾
  • 计算机网络体系———深度详讲
  • 微信小程序开发——实战开发

🐓每日一句:🍭我很忙,但我要忙的有意义!


文章目录

  • 2.字节流
    • 2.1 IO概述和分类
    • 2.2 字节流写数据
    • 字节流写数据的3中方法
    • 2.4 字节流写数据的两个小问题
    • 2.5 字节流写入数据的异常处理
    • 欢迎添加微信,加入我的核心小队,请备注来意


2.字节流

2.1 IO概述和分类

在这里插入图片描述

IO流概述

Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。
Java.io 包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。
一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。

  • IO:输入/输出(Input/Output)
  • 流:是一种抽象概念,是对数据传输的总称。也就是说数据在设备之间传输称为流,流的本质是数据传输。
    在这里插入图片描述

IO流的分类

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

一般情况下,我们说IO流的分类是按照数据类型来分的

字符流与字节流使用技巧:
若果数据通过Window自带的记事本本地软件打开,我们还可以读懂里面的内容就使用字符流,否则使用字节流。如果你不知道该使用哪种类型的流,就使用字节流。

2.2 字节流写数据

字节流抽象基类

  • InputStream
    这个抽象类是表示字节输入流的所有类的超类
    public abstract class InputStream
    extends InputStream
    InputStream 是用来从 CDR 编组流中读取 IDL 类型的 Java API。这些方法供 ORB 用来解组 IDL 类型以及从 Any 中析取 IDL。_array 形式的方法可以直接用来读取 IDL 类型的序列和数组。

该流用于从文件读取数据,它的对象可以用关键字 new 来创建。

有多种构造方法可用来创建对象。

可以使用字符串类型的文件名来创建一个输入流对象来读取文件:

InputStream f = new FileInputStream("C:/java/hello");

也可以使用一个文件对象来创建一个输入流对象来读取文件。我们首先得使用 File() 方法来创建一个文件对象:

File f = new File("C:/java/hello");
InputStream in = new FileInputStream(f);

创建了InputStream对象,就可以使用下面的方法来读取流或者进行其他的流操作。

  • OutputStream
    **这个抽象类是表示字节输出流的所有类的超类,输出流接受输出字节并将这些字节发送到某个接收器。 **
    public abstract class OutputStream
    extends OutputStream
  • 子类名特点:子类名称都是以其父类名作为子类名的后缀

FileOutputStream :文件输出流用于将数据写入File

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

该类用来创建一个文件并向文件中写数据。

如果该流在打开文件进行输出前,目标文件不存在,那么该流会创建该文件。

有两个构造方法可以用来创建 FileOutputStream 对象。

使用字符串类型的文件名来创建一个输出流对象:

OutputStream f = new FileOutputStream("C:/java/hello")

也可以使用一个文件对象来创建一个输出流来写文件。我们首先得使用File()方法来创建一个文件对象:

File f = new File("C:/java/hello");
OutputStream fOut = new FileOutputStream(f);

创建OutputStream 对象完成后,就可以使用下面的方法来写入流或者进行其他的流操作。

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

  • 创建字节输出流对象(调用系统功能创建了文件、创建了字节输出流对象、让字节输出流对象那个指向文件
  • 调用字节输出流对象的写数据方法
  • 释放资源(关闭此文件输出流并释放与此相关联的任何系统资源)

代码示例:

package com.ithmm_02;

import java.io.FileOutputStream;
import java.io.IOException;

public class InputStream {
    public static void main(String[] args) throws IOException {
        //创建字节输出流对象
        //FileOutStream(String name):创建文件输出流已指定的名称写入文件
        FileOutputStream fos = new FileOutputStream("Io\\fas.txt");
        /*
        1.调用系统功能创建文件
        2.创键字节输出流对象
        3.让字节输出流对象指向创建好的文件
         */
        //void write (int  b),将指定字节写入文件输出流
        fos.write(97);
        fos.write(98);
        fos.write(99);
        fos.write(55);

        // void close()
        //          关闭此输出流并释放与此流有关的所有系统资源。
        fos.close();

        //fos.write(121);//Stream Closed
    }
}

在这里插入图片描述


字节流写数据的3中方法

方法名说明
void write(byte[] b)将 b.length 个字节写入此输出流。
void write(byte[] b, int off, int len)将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。
void write(int b)将指定 byte 写入此输出流。
package com.ithmm_02;

import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamDemo02 {


    public static <FileOutStream> void main(String[] args) throws IOException {
        /*
        void write(byte[] b)	将 b.length 个字节写入此输出流。
        void write(byte[] b, int off, int len)	将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。
        void write(int b)	将指定 byte 写入此输出流。
         */
        //fileOutStream(String name),创键文件输出以指定的文件名写入文件夹
       FileOutputStream fos = new FileOutputStream("Io\\fos.txt");
       //      this(var1 != null ? new File(var1) : null, false);
//        FileOutputStream fos = new FileOutputStream(new File("Io\\fos.txt"));

        //FileOutStream (File file); 创键文件输出流以写入由指定的File对象表示的文件
      // FileOutputStream fos2 = new FileOutputStream( new File("Io\\fos.txt"));

//        void write(int b)	将指定 byte 写入此输出流。
//        fos.write(97);
//        fos.write(98);
//        fos.write(99);

        //void write(byte[] b)	将 b.length 个字节写入此输出流。
//        byte[]  bys = {97,98,99, 32, 99};
//        fos.write(bys);
       // fos.close();

        // void write(byte[] b)	将 b.length 个字节写入此输出流
       byte[] bys1 = "abcdefg".getBytes();
        //        fos.write(bys1);


        //void write(byte[] b, int off, int len)	将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。
      fos.write(bys1,0,bys1.length);
//释放
       fos.close();
    }
}

2.4 字节流写数据的两个小问题

在这里插入图片描述

2.5 字节流写入数据的异常处理

finally:在异常处理是提供finally块;来执行所有清除操作,比如说IO流中的释放资源
特点:被finally控制的语句一定会执行,除非JVM退出

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

在这里插入图片描述

欢迎添加微信,加入我的核心小队,请备注来意

👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇

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

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

相关文章

Java流式编程stream

文章目录一、简介二、创建Stream三、常用操作四、其他操作一、简介 流式 API 从 Java8 开始引入&#xff0c;支持链式书写。 流只能消费一次&#xff0c;不能被两次消费&#xff08;两次最终操作&#xff09; 流在管道中流通&#xff0c;在节点被处理。 流【无存储】&#x…

vim如何进行批量化注释及取消,也在1024表明自己算十分之一的程序员

前言 &#x1f47b;作者&#xff1a;龟龟不断向前 &#x1f47b;简介&#xff1a;宁愿做一只不停跑的慢乌龟&#xff0c;也不想当一只三分钟热度的兔子。 &#x1f47b;专栏&#xff1a;C初阶知识点 &#x1f47b;工具分享&#xff1a; 刷题&#xff1a; 牛客网 leetcode笔记软…

人家网站都免费了,你还用Python去爬?

文章目录⛳️ 实战场景⛳️ 实战编码⛳️ 实战场景 这次实战的目标是一个叫做猫肯的字体站点&#xff0c;该站点所有的字体都是免费可商用的&#xff0c;所以为什么还要去下载呢&#xff1f; 答案是练手&#xff0c;借免费站点学习爬虫&#xff0c;&#x1f30b; 目标站点地址…

Python爬虫技术系列-05字符验证码识别

Python爬虫技术系列-05字符验证码识别1. 光学文字识别1.1 OCR概述1.2 OCR识别库Tesseract下载安装1.3 生成验证码图片1.4 字符验证码识别1.安装python识别验证码库&#xff1a;2.验证码识别&#xff1a;1.5 使用打码平台识别验证码1.6 滑动验证码识别1. 光学文字识别 1.1 OCR概…

卡尔曼滤波实例——预测橘子的轨迹

目录 流程 一、采用轮廓的方式检测橘子位置 &#xff08;一&#xff09;滚动条获取阈值 &#xff08;二&#xff09;获取到图像中的包围橘子对应的白色图形的最小矩形框的信息 二、获取橘子检测框的质心 三、将质心送入卡尔曼滤波器&#xff0c;获取下一次的质心位置 四…

Markdown语言的简单学习

Markdown简单语法标题#空格 一级标题##空格 二级标题 以此类推三级标题四级...五级.....引用列表代码块表格分隔线链接强调语法&#xff08;斜体、加粗、下划线&#xff09;标题 #空格 一级标题 ##空格 二级标题 以此类推 三级标题 四级… 五级… … 引用 这是一段引用 …

<人生重开模拟器>——《Python项目实战》

目录 1.模拟实现 "人生重开模拟器" 1.1 问题导引&#xff1a; 1.2 问题分析&#xff1a; 2. 模拟实现分析及步骤&#xff1a; 3.完整源码&#xff1a; 4.写在最后的话&#xff1a; 后记&#xff1a;●由于作者水平有限&#xff0c;文章难免存在谬误之处&…

数据结构与算法----栈和队列(Stack Queue)

文章目录栈栈的操作栈的初始化入栈出栈取栈顶的元素判断栈是否为空求栈中数据元素的个数遍历栈中的所有元素清空栈栈的存储结构顺序存储链式存储顺序栈和链栈的区别栈的实战题目队列队列的操作入队出队遍历队列清空队列队列的存储结构顺序存储循环队列链式存储队列实战题目总结…

快速发布windows上的web项目【免费内网穿透】

快速发布windows上的web项目【免费内网穿透】 文章目录快速发布windows上的web项目【免费内网穿透】什么是cpolar内网穿透&#xff1f;概述1. 搭建一个静态Web站点1.1 下载演示站点1.2 本地运行演示站点1.3 本地浏览测试站点是否正常2. 注册并安装cpolar内网穿透3. 本地web站点…

玩转 CSS 的艺术之美

你将获得 深刻理解各种CSS原理 解构不为人知的CSS技巧 概念、技巧、场景三合一&#xff0c;实现“神奇”效果 强化吸收CSS知识体系&#xff0c;玩转各种神操作骚技巧 作者介绍 JowayYoung&#xff0c;资深前端工程师&#xff0c;目前就职于网易互动娱乐事业群&#xff0c…

前端面试之道

小册介绍 如果需要用一句话来介绍这本小册的话&#xff0c;「一年磨一剑」应该是最好的答案了。 为什么这样说呢&#xff1f;在出小册之前&#xff0c;我收集了大量的一线大厂面试题&#xff0c;通过大数据统计出了近百个常考知识点&#xff0c;然后根据这些知识点写成了这本…

《深度学习》:CANN训练营_昇腾AI入门课学习笔记(第二章 TensorFlow模型迁移训练)

文章目录第二章 TensorFlow模型迁移&训练本章学习目标AI模型开发基础知识入门Python水平要求了解深度学习和神经网络了解TensorFlow AI框架了解基于CANN的模型开发流程&#xff08;重点&#xff09;TensorFlow AI模型迁移详解为什么要做模型迁移TensorFlow AI模型自动迁移详…

【Python数据科学快速入门系列 | 10】Matplotlib数据分布图表应用总结

这是机器未来的第59篇文章 原文首发地址&#xff1a;https://robotsfutures.blog.csdn.net/article/details/127484292 《Python数据科学快速入门系列》快速导航&#xff1a; 【Python数据科学快速入门系列 | 01】Numpy初窥——基础概念【Python数据科学快速入门系列 | 02】创…

安卓讲课笔记3.3 相对布局

文章目录零、学习目标一、导入新课二、新课讲解&#xff08;一&#xff09;相对布局概述1、布局特点2、继承关系图3、常用属性&#xff08;1&#xff09;相对于父容器居中&#xff08;2&#xff09;相对于父容器对齐&#xff08;3&#xff09;相对于其它控件位置&#xff08;4&…

牛客网经典Java面试常见题

个人主页&#xff1a;熬夜磕代码丶 作品专栏: 数据结构与算法 我变秃了&#xff0c;也变强了 给大家介绍一款程序员必备刷题平台——牛客网 点击注册一起刷题收获大厂offer吧 文章目录一、二叉搜索树与双向链表二、从尾到头打印链表三、调整数组奇数位于偶数前面四、删除链表…

大数据毕业设计可视化大屏前后端项目分享

1、前言 很久没有分享过可视化大屏的项目了&#xff0c;距离上次分享基于Echarts的数据可视化大屏系统设计分享这篇可视化系统已经过去了整整一年有余。当时分享这篇博客没想到会收获这么多的阅读量&#xff0c;并且在刚发布的时候&#xff0c;还上了CSDN的博客热搜2&#xff…

gcc环境下演示C语言变长数组

前言 &#x1f47b;作者&#xff1a;龟龟不断向前 &#x1f47b;简介&#xff1a;宁愿做一只不停跑的慢乌龟&#xff0c;也不想当一只三分钟热度的兔子。 &#x1f47b;专栏&#xff1a;C初阶知识点 &#x1f47b;工具分享&#xff1a; 刷题&#xff1a; 牛客网 leetcode笔记软…

安全帽佩戴识别算法

安全帽佩戴识别算法采用SuiJi-AI人工智能深度学习技术计算机智能视觉识别算法&#xff0c;且通过规模化的安全帽数据识别训练。安全帽佩戴识别算法借助现场已有的监控摄像头对监控画面中人员着装行为进行实时分析识别。假如检测人员不戴安全帽&#xff0c;SuiJiAi将立即记录和警…

致敬第一个1024(第一次Java代码编程)

昨日&#xff0c;笔者刚刚下载好IDEA&#xff0c;今日&#xff0c;笔者将会实现第一次的Java代码&#xff01;&#xff01;信心满满&#xff01;&#xff01;下面请看笔者的代码吧&#xff01;&#xff01;骄傲的小心&#xff0c;已经澎湃&#xff01; 因此&#xff0c;本篇文…

如何实现一个SQL解析器

作者&#xff1a;vivo 互联网搜索团队- Deng Jie 一、背景 随着技术的不断的发展&#xff0c;在大数据领域出现了越来越多的技术框架。而为了降低大数据的学习成本和难度&#xff0c;越来越多的大数据技术和应用开始支持SQL进行数据查询。SQL作为一个学习成本很低的语言&#…