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

 

目录

题外话

正题

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.mfbz.cn/a/571124.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网工内推 | 深圳网工专场,上市公司、国企,安全认证优先

01 深圳市同为数码科技股份有限公司武汉分公司 招聘岗位:网络工程师 职责描述: 1、负责网络设备的管理、调试、配置、维护等; 2、负责信息安全网络安全设备、系统的运维; 3、负责整体网络系统技术的相关工作,包括架构…

使用C++实现尾插式循环链表结构

在编码中避免不了使用链表,特别是循环链表,很多同学使用时为了省事直接使用C STL库中的链表实现,这样当然很简单也不容易出错,但同时也不可避免的带来了一些问题: 是半个黑盒,虽然能看源码,但是…

如何免费生成网址二维码?支持自定义设计的二维码生成器

在国内外的许多创意广告中都在使用网址二维码。比如:大众汽车隐藏在汽车零件上的企业招聘二维码,扫码后进入大众汽车官网在线申请投递简历;帕森斯设计学院的户外广告中打印在红色沙滩椅上的二维码,扫描后可以在线申请暑期课程&…

详细分析mysqlslap的基本知识 | 压力测试(附Demo)

目录 前言1. 基本知识2. 参数解读2.1 auto-generate-sql2.2 only-print2.3 iterations2.4 并发处理参数 前言 对数据库进行压力测试,对此补充这方面的详细知识点 1. 基本知识 mysqlslap 是 MySQL 自带的用于模拟数据库负载的压力测试工具 可以模拟多个客户端并发…

【Java | 多线程】LockSupport 的使用和注意事项

了解一下 LockSupport LockSupport是一个类,位于java.util.concurrent.locks包中,提供了基本的线程同步机制。 LockSupport的主要作用是挂起和唤醒线程。它提供了两个主要的静态方法:park()和unpark()。 park():用于挂起当前线…

AI论文速读 |从图结构角度统一车道级交通预测:基准和基线

题目:Unifying Lane-Level Traffic Prediction from a Graph Structural Perspective: Benchmark and Baseline 作者:Shuhao Li, Yue Cui, Jingyi Xu, Libin Li, Lingkai Meng, Weidong Yang(杨卫东), Fan Zhang, Xiaofang Zhou(周晓方) 机构&#xff…

【Python】Python函数的黑魔法:递归,嵌套函数与装饰器

欢迎来到CILMY23的博客 本篇主题为: Python函数的黑魔法:递归,嵌套函数与装饰器 个人主页:CILMY23-CSDN博客 系列专栏:Python | C | C语言 | 数据结构与算法 感谢观看,支持的可以给个一键三连&#xff…

redis基于Stream类型实现消息队列,命令操作,术语概念,个人总结等

个人大白话总结 1 在Redis Stream中,即使消息被消费者确认(acknowledged, ACK),消息也不会自动从Stream数据结构中删除。这与Kafka或RabbitMQ等传统消息队列系统的做法不同,在那些系统中,一旦消息被消费并…

废液收集系统物联网远程监控解决方案

废液收集系统物联网远程监控解决方案 在面对日益严峻的环保压力和严格的法律法规要求下,构建一套高效、智能的废液收集系统物联网远程监控解决方案显得尤为重要。该方案旨在通过深度融合物联网技术、云计算、大数据分析等先进手段,实现对废液收集系统的…

RuoYi-Vue-Plus (SaToken 注解鉴权)

一、SaInterceptor 注解鉴权和路由拦截鉴权 拦截器:SaInterceptor 实现类位置: cn.dev33.satoken.interceptor.SaInterceptor 功能:Sa-Token 综合拦截器,提供注解鉴权和路由拦截鉴权能力 /*** 创建一个 Sa-Token 综合拦截器&…

测试用例设计方法-异常测试

飞的最高的海鸥,能看到最远的奇景。大家好,继续给大家分享如何进行异常测试,首先要做好异常测试,需要我们对被测系统进行全面的了解,熟悉被测系统的功能、架构和运行机制,然后在这个基础上尽可能覆盖各种的…

再谈“协议”

1.认识协议 之前我们使用TCP的方式实现了一个服务器,而TCP是面向字节流的,而UDP是面向数据报的,接下来通过一个例子区分两种的区别。 UDP面向数据报:就如同发快递,你发多少个快递,对面就收到多少个快递&am…

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

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

OpenCompass 大模型评测实战——作业

OpenCompass 大模型评测实战——作业 一、基础作业1.1、使用 OpenCompass 评测 internlm2-chat-1_8b 模型在 C-Eval 数据集上的性能1.1.1、安装基本环境1.1.2、解压数据集1.1.3、查看支持的数据集和模型1.1.4、启动评测 二、进阶作业2.1、将自定义数据集提交至OpenCompass官网 …

WIFISKY 7层流控路由器 confirm.php RCE漏洞复现

0x01 产品简介 WIFISKY-7层流控路由器是一款可用于家庭或办公环境的无线路由器,具备流控功能以优化网络流量和提供更稳定的网络连接。该路由器采用了7层流控技术,能够依据网络数据包的内容进行智能管理,从而实现对网络流量的精细化控制和优化。这种技术可以提升网络的整体性…

vscode 使用文件模板功能来添加版权信息

vscode 新建文件的时候,自动填充作者及版权信息 无需使用插件,操作如下: 选择 “首选项(Preferences)”。在搜索框中输入 “file template” 或者 “文件模板”,然后选择相关的设置项。 {"C_Cpp.clang_format_fallbackSt…

ctfshow web入门 SQl注入 web191--web200

web191 多了一个正则绕过 上脚本布尔盲注 用ord #author:yu22x import requests import string url"http://70adf0cb-2208-4974-b064-50a4f4103541.challenge.ctf.show/api/index.php" sstring.ascii_lettersstring.digits flag for i in range(1,45):print(i)for j…

【熵与特征提取】从近似熵,到样本熵,到模糊熵,再到排列熵,包络熵,散布熵,究竟实现了什么?(第六篇)——“散布熵”及其MATLAB实现

今天讲散布熵,之前用了几篇文章分别讲述了功率谱熵、奇异谱熵、能量熵、近似熵、样本熵、模糊熵、排列熵、包络熵这8种类型的熵: Mr.看海:【熵与特征提取】基于“信息熵”的特征指标及其MATLAB代码实现(功率谱熵、奇异谱熵、能量…

脚手架搭建项目package.json配置中依赖的版本问题

脚手架搭建项目package.json配置中依赖的版本问题 问题描述:项目刚搭建好,运行没有问题,为什么过一段时间,删除node_modules,或者重新安装包依赖,然后项目某些地方出现莫名的错误(依赖库的地方…

希捷HDD最新财报:销售同比下降11%,环比增长6%,4Q24前景看好

Seagate Technology Holdings plc公布了截至2024年3月29日的第三财季财务业绩。 “随着云需求改善、我们强大的运营纪律和价格执行,希捷3月季度的营收增长了6%,非GAAP每股收益较上一季度翻了一番多。这种组合为我们市场复苏时回归目标利润率奠定了基础。…
最新文章