JavaEE初阶之IO流快速顿悟一(超详细)

news2024/11/18 13:32:34

 

目录

题外话

正题

IO流

Java.io.FileInputStream

int read()

int read(byte[] b)

关于异常

Java7的新特性: try-with-resources ( 资源自动关闭)

Java.io.FileOutputStream

void write(int b)

void write(byte[] b)

小结


题外话

十年青铜无人问,一朝顿悟冲王者

前天去玩了,昨天学习了新内容,奈何状态不佳

我写一篇博客快一点就一个小时多,慢一点需要两个小时

对我来说还是很费力的,很想把知识点很详细的告诉大家,让大家觉得看我写的博客和看视频一样生动形象

喜欢的家人们记得给个三连(点赞关注收藏!!!)

正题

IO流

java Io流这块有四大家族:

java. io. Inputstream字节输入流

java . io. Outputstream字节输出流

java . io. Reader字符输入流

java. io. Writer字符输出流

四大家族的首领都是抽象类。(abstract class)

文件专属类:

java. io. FileInputstream

java. io. FileOutputstream

java. io. FileReader

java. io. FileWriter

转换流类:

(将字节流转换成字符流)

java. io. InputStreamReader

java. io. Outputs treamWriter

缓冲流专属类:

java. io. Buf fe redReader

java. io. Bufferedwriter

java. io. BufferedInputstream

java. io. Buf feredOu tputs tream

数据流专属类:

java. io. DataInputstream

java. io. DataOutputstream

标准输出流类:

java. io. PrintWriter

java. io.Printstream

对象专属流类:

java. io. ObjectInputstream

java. io . objectoutputstrean

打印流相关的类:

java. io. PrintWriter

java. io.Printstream

字节数组相关的类:

ByteArrayInputStream

ByteArrayOutputStream

压缩和解压缩相关的类:

GZIPInputStream

GZIPOutputStream

线程相关的类:

PipedInputStream

PipedOutputStream

所有的流都实现了: java. io. Closeable接口,都是可关闭的,都有close()方法。

流毕竟是一个管道,这个是内存和硬盘之间的通道,用完之后一定要关闭,不然会耗费(占用)很多资源。养成好习惯,用完流一定要关闭。

注意:在java中只要"类名”以stream结尾的都是字节流。以"Reader/Writer"结尾的都是字符流

本篇博客详细讲解下FileInputStream类,FileOutputStream类

Java.io.FileInputStream

1.文件字节输入流,负责读

2.是一个万能流,任何文件都能读。但还是建议读进制文件。 例如:图片,声音,视频等。

3.但是FileInputStream肯定 也是可以读普通文本的。只不过一次读取一个字节。容易出现乱码问题。

4. FileInputStream的常用构造 方法:

FileInputStream(String name)通过文件路径构建一个 文件字节输入流对象。

5. FileInputStream的常用方法:

int read(); 调用一次read() 方法则读取个字节, 返回读到的字节本身。如果读不到任何数据则返回-1

int read(byte[] b);一次最多可以读到b. length个字节[只要文件内容足够多)。返回值是读取到的字节数量。如果这一 次没有读取到任何数据,则返回-1

int read(byte[] b, int off, int Len);一次读取Len个字节。将读到的数据从byte数组的off位置开始放,一共放len字节。

void close() 关闭流

long skip(Long n); 跳过n个字节。

int available(); 获取流中剩余的估计字节数。

以下我将用代码例子一一列举FileInputStream中的常用方法

int read()

intread()
          从此输入流中读取一个数据字节。

先说说 int read()这个方法,调用这个方法一次读取一个字节,并且返回int类型值,如果文件内容已经读完将会返回-1

例如

public static void main(String[] args) {

//创建InputStream对象
        InputStream in=null;

        {
            try {

//使用多态new一个FileInputStream并传入文件路径作为参数
                in = new FileInputStream("D:\\白\\file1.txt");

//创建readByte接收in.read()返回值
                int readByte;

//用readByte作为接收in.read()返回值,当readByte不等于-1
               while ((readByte=in.read())!=-1)
               {

//打印readByte
                   System.out.println(readByte);
               }
            } catch (IOException e) {
                e.printStackTrace();
            }

finally {

//当in不为空的时候一定要记得关闭,调用close()方法
                if (in != null) {
                    try {
                        in.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}

文件内容

运行结果如下

int read(byte[] b)

 intread(byte[] b)
          从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。

我们可以往read()方法中传入byte数组,每次读取会根据数组大小进行读取,每次返回值为读取的大小,内容读取完毕再读取会返回-1

演示一下

这是我们要进行读取的文件

代码如下

public class FileInputStreamTest02 {
    public static void main(String[] args) {
        InputStream in=null;

//创建byte数组大小为4
        byte[] bytes=new byte[4];

创建read记录每次读取大小
        int  read=0;
        try {
            in=new FileInputStream("D:\\白\\file1.txt");

//将读取大小传入read,如果不为-1则转换成字符串,并打印输出
            while ((read=in.read(bytes))!=-1)
            {
                String s1=new String(bytes,0,read);
                System.out.println(s1);
            }

        } catch (IOException e) {
           e.printStackTrace();
        }
        finally {
            try {
                if (in!=null) {
                    in.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

运行结果

关于异常

大家可以看到这里会有许多异常

这些异常我们都需要去处理,

FileNotFoundException这个异常继承于IOException的异常,大家catch的时候就可以直接写IOException异常

Java7的新特性: try-with-resources ( 资源自动关闭)

凡是实现了Closeable接口的流都可以使用try-with-resources.都会自动关闭。

try-with-resources语法格式:

try(

声明流手

声明流;

声明流;

声明流;

声明流

){

}catch(Exception e){

}

接下来的内容我都会使用try-with-resources的方式

Java.io.FileOutputStream

1.文件字节输出流,负责写。

2.常用构造方法:

File0utputStream(String name)

创建一个文件字节输出流对象,这个流在使用的时候,最开始会将原文件内容全部清空,然后写入。

FileOutputStream(String name, boolean append)

创建一个文件字 节输出流对象,当append是true的时候, 不会清空原文件的内容,在原文件的末尾追 加写入。

创建个文件字 节输出流对象,当append是false的时候, 会清空原文件的内容,然后写入。

3.常用方法:

void close();

void write(int b);写一个字节

void write(byte[] b);将整个byte字节数组写出

void write(byte[] b, int off, int Len) 将byte字节数组的一部分写出

void write(int b)

返回值为空,会将参数b以ASCII码的形式写入文件中

演示一下!

这是我们现在的文件内容

public class FileOutputStreamTest01 {
    public static void main(String[] args) {
        try (OutputStream out=new FileOutputStream("D:/白/file1.txt")){

//写入以下内容
            out.write(98);
            out.write(99);
            out.write(100);

        }
         catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

当我们运行结束之后就会清空,并存入我们写好的内容

void write(byte[] b)

此方法是将数组中的元素写入指定文件中

这是我们现在的文件

当我们运行以下代码

public static void main(String[] args) {

    try(OutputStream out=new FileOutputStream("D:/白/file1.txt"))
    {

//建立byte数组,将元素放入
       byte[] bytes={97,98,99,100};

//调用write方法将bytes传入
       out.write(bytes);
    }
    catch(IOException e){
        e.printStackTrace();
    }

}

文件就变成了这样

小结

这两个类主要就是读和写,很简单,.内容不太多

麻烦家人们支持一下(点赞关注收藏!!!)

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

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

相关文章

会声会影滤镜怎么用 会声会影滤镜效果怎么调 会声会影视频制作教程

在进行视频剪辑时,合理地运用滤镜效果可以提升视频的观赏性,使你的作品更加出彩。这篇文章便一起来学习会声会影滤镜怎么用,会声会影滤镜效果怎么调。 一、会声会影滤镜怎么用 使用会声会影的滤镜效果非常简单,以下是具体的操作…

Linux部署MySQL

部署MySQL 先停掉虚拟机中的MySQL,确保你的虚拟机已经安装Docker,且网络开通的情况下,执行下面命令即可安装MySQL: docker run -d \ --name mysql \ -p 3306:3306 \ -e TZAsia/Shanghai \ -e MYSQL_ROOT_PASSWORD123 \ mysql 安…

13. Spring AOP(一)思想及使用

1. 什么是Spring AOP AOP的全称是Aspect Oriented Programming,也就是面向切面编程,是一种思想。它是针对OOP(面向对象编程)的一种补充,是对某一类事情的集中处理。比如一个博客网站的登陆验证功能,在用户进行新增、编辑、删除博…

【算法分析与设计】重复的DNA

📝个人主页:五敷有你 🔥系列专栏:算法分析与设计 ⛺️稳中求进,晒太阳 题目 DNA序列 由一系列核苷酸组成,缩写为 A, C, G 和 T.。 例如,"ACGAATTCCG" 是一个 DNA序列 。 在研究…

【架构方法论(一)】架构的定义与架构要解决的问题

文章目录 一. 架构定义与架构的作用1. 系统与子系统2. 模块与组件3. 框架与架构4. 重新定义架构:4R 架构 二、架构设计的真正目的-别掉入架构设计的误区1. 是为了解决软件复杂度2. 简单的复杂度分析案例 三. 案例思考 本文关键字 架构定义 架构与系统的关系从业务逻…

前端零代码开发实践:页面嵌套+逻辑连线0开发扩展组件,实现切换开关控制扇叶转动。能无代码封装扩展组件,有别于常规的web组态或低代码平台

前言: 官网:http://www.uiotos.net/ 什么是 UIOTOS? 这是一款拥有独创专利技术的前端零代码工具,专注于解决前端界面开发定制难题,原型即应用!具有页面嵌套、属性继承、节点连线等全新特性,学习门槛低…

OpenCV 如何实现边缘检测器

返回:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV如何实现拉普拉斯算子的离散模拟 下一篇 :OpenCV系列文章目录(持续更新中......) 目标 在本教程中,您将学习如何: 使用 OpenCV 函数…

基于RK3588的全国产鸿蒙边缘计算工控机在智能交通ETC收费系统的应用

1.1 产品简介 基于智能交通、工业互联等行业快速智能化发展的需求,以 OpenHarmony 为框架开发嵌入 HamonyOS,打造了具有高智能、高可靠、高安全的自主 可控的边缘处理器 XM-RK3588。 图 1-1 边缘处理器 HamonyOS强化 IoT 互联互动能力,让边缘…

【JAVA基础之IO】字节流、字符流以及乱码问题

🔥作者主页:小林同学的学习笔录 🔥mysql专栏:小林同学的专栏 目录 1. IO概述 1.1 什么是IO 1.2 IO的分类 1.3 字节和字符流的顶级父类 2. 字节流 2.1 一切皆为字节 2.2 字节输出流【OutputStream】 2.3 FileOutputStream类…

【Python】自定义修改pip下载模块默认的安装路径

因为电脑下载了Anaconda提供的默认Python 3.9 以及后期下载的python3.10所以在Pychram进行项目开发时,发现一些库怎么导入都导入不了,手动install也是失败,后期在cmd里面发现python以及pip配置有点儿混乱,导致执行命令时&#xff…

学习c语音的自我感受

因为是自学,所以走过不少弯路。去年,受知乎“python性能弱”风潮的影响,学过go,rust。 在学习这些新语言的时候,由衷感受到,或是本身侧重方向的原因(如go侧重服务器),或是语言太新不…

01-服务与服务间的通信

这里是极简版,仅用作记录 概述 前端和后端可以使用axios等进行http请求 服务和服务之间也是可以进行http请求的spring封装的RestTemplate可以进行请求 用法 使用bean注解进行依赖注入 在需要的地方,自动注入RestTemplate进行服务和服务之间的通信 注…

探索React Router:实现动态二级路由

我有一个路由配置的二维数组,想根据这个数组结合路由组件来动态生成路由,应该怎么样实现。在 React Router 6 中渲染二级路由的方式跟 React Router 65相比有一些变化,但核心思路仍然是利用 Route 组件和路由嵌套的方式。下面是具体的步骤: 定义路由数组…

C系统编程:从零手搓一个shell

背景 这么久没更新就是在干这件事!!因为系统编程已经学的差不多了,所以想找几个项目练练手,之前就一直想写一个自己的shell!!现在终于有机会实现了。 首先说明一下我的操作系统:Arch linux 服务…

C++ - STL详解(七)— stack和queue的介绍及使用

目录 一. stack 1.1 stack的介绍 1.2 stack的定义 1.3 stack的使用 ​编辑 二. queue 2.1 queue的介绍 2.2 queue的定义 2.3 queue的使用 一. stack 1.1 stack的介绍 stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除…

redis底层数据结构之ziplist

目录 一、概述二、ziplist结构三、Entry结构四、为什么ZipList特别省内存五、ziplist的缺点 redis底层数据结构已完结👏👏👏: ☑️redis底层数据结构之SDS☑️redis底层数据结构之ziplist☑️redis底层数据结构之quicklist☑️red…

ETL工具-nifi干货系列 第十六讲 nifi Process Group实战教程,一文轻松搞定

1、目前nifi系列已经更新了10多篇教程了,跟着教程走的同学应该已经对nifi有了初步的解,但是我相信同学们应该有一个疑问:nifi设计好的数据流列表在哪里?如何同时运行多个数据流?如启停单个数据流? 带着这些…

第二期书生浦语大模型训练营第四次笔记

大模型微调技术 大模型微调是一种通过在预训练模型的基础上,有针对性地微调部分参数以适应特定任务需求的方法。 微调预训练模型的方法 微调所有层:将预训练模型的所有层都参与微调,以适应新的任务。 微调顶层:只微调预训练模型…

Pandas数据分析小技巧

Pandas数据分析小技巧:提升数据处理效率与准确性的秘诀 Pandas是一个强大的Python数据分析库,它提供了快速、灵活且富有表现力的数据结构,使得数据清洗、转换、分析等操作变得简单而高效。本文将介绍一些Pandas数据分析的小技巧,…

年如何在不丢失数据的情况下解锁锁定的 Android 手机?

当您忘记密码、PIN 码或图案并且想要解锁 Android 手机时,您可能会丢失 Android 手机上的数据。但您无需再担心,因为在这里,我们想出了几种解锁锁定的 Android 手机而不丢失数据的方法。 方法 1. 使用 Android Unlock 解锁锁定的 Android 且不…