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

2024-04-21 17:52

本文主要是介绍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();
    }

}

文件就变成了这样

小结

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

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

这篇关于JavaEE初阶之IO流快速顿悟一(超详细)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/923695

相关文章

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1