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

news/2024/9/23 4:19:47/

 

目录

题外话

正题

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.ppmy.cn/news/1434987.html

相关文章

Ollama 环境搭建与使用指南

Ollama 环境搭建与使用指南 什么是 Ollama?环境搭建CPU 环境GPU 环境 运行 Ollama模型存储路径总结 什么是 Ollama? Ollama 通过在本地部署和运行大型语言模型,为用户提供了一个方便、灵活的工具来探索人工智能的强大能力。 环境搭建 CPU 环境 如果你的机器没…

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

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

开源数据库postgresql在统信系统上的离线安装

统信系统上的安装: 创建目录 [rootlocalhost ~]# cd /home/ [rootlocalhost home]# mkdir postgres 上传文件 在当前目录解压,并安装依赖包 tar zxvf postgresql-15.4.tar.gz mv postgresql-15.4 postgresql rpm -ivh --force --nodeps *.rpm 预…

XiaodiSec day020 Learn Note 小迪安全学习笔记

XiaodiSec day020 Learn Note 小迪安全学习笔记 记录得比较凌乱,不尽详细 php 缺陷 2024.1.29 00:32 前言 在课程安排上先讲语言缺陷,再讲漏洞 函数缺陷与绕过 CTF 详细点: intval strpos in_array preg_match str_replace 开始 1a 1 1admin …

Golang基础-13

Go语言基础 介绍 并发 channel goroutine 互斥锁 读写锁 原子操作 select 超时处理 sync包 runtime包 介绍 本文介绍Go语言中 channel、goroutine、互斥锁、读写锁、原子操作、select、超时处理、sync包、runtime包等相关知识。 并发 进程是是最小的资源管理单元…

商汤大模型一体机可节约80%推理成本,完成云端边全栈布局

商汤科技在上海举办技术交流日活动 会上商汤发布业内首个“云、端、边”全栈大模型产品矩阵,并推出全新升级的“日日新SenseNova 5.0”大模型体系。 影响至股价方面,商汤(00020.HK)今日开盘后大幅上涨。随后商汤在港交所公告称,商汤集团的…

【信号处理】基于CNN的心电(ECG)信号分类典型方法实现(tensorflow)

关于 本实验使用1维卷积神经网络实现心电信号的5分类。由于数据类别不均衡,这里使用典型的上采样方法,实现数据类别的均衡化处理。 工具 方法实现 数据加载 Read the CSV file datasets: NORMAL_LABEL0 , ABNORMAL_LABEL1,2,3,4,5 ptbdb_abnormalpd.…

碰到今日伦敦银价格走势图不懂得分析怎么办?

踏入2024年,伦敦银出现了比往年更多的投资机会,尤其是近期伦敦银价格连续上涨突破多个整数关口,现在已经站在28上方。碰到这么强的走势,投资者自然很想快点入场交易。但是交易前投资者需要分析今日伦敦银价格走势图之后再入场&…