JavaIO流操作

目录

简介

字节输入流

获取字节输入流

关闭输入流

字节输出流

获取字节输出流

换行符

刷新

关闭输出流

字符流输入流

获取字符输入流

关闭输入流

字符输出流

获取字符输出流

换行符

刷新

关闭输出流


简介

IO流分为两大派系:
    1.字节流:字节流又分为字节输入流、字节输出流
    2.字符流:字符流由分为字符输入流、字符输出流

什么叫输入流?

我们可以认为,把文件内容拿到java代码中,文件的内容输入到了java代码内,这种被称为输入流。

什么叫输出流?

我们可以认为,把java代码内输入的一些内容,保存到java代码外的文件中,这种被称为输入流。

字节输入流

获取字节输入流

FileInputStream fileInputStream = new FileInputStream(String str,);

str:文件的地址路径。

// 案例
FileInputStream fileInputStream = new FileInputStream("../io-demo/abc/2.txt");

方案一:

int len = fileInputStream.read(byte[] b);

根据数组大小读取文件内容。

len:当前读取字节的个数。

b:byte数组,每次读几个字节取决于定义的byte数组,读取到的内容后,会放入定义好的byte数组(不设置默认读1个字节)。

案例:按照数组大小读取内容

package com.zsh;

import java.io.FileInputStream;
import java.io.IOException;

/**
 * IO字节输入流
 */
public class IoInputStream {
    public static void main(String[] args) {
        try (
                // 创建文件字节输入流管道,与源文件接通。
                FileInputStream fileInputStream = new FileInputStream("../io-demo/abc/2.txt")
        ) {
            // 定义byte数组,设置一次读取多少个字节(当前每次从文件中读取3个字节出来)
            byte[] buf = new byte[3];

            // 定义变量,接收当前读取内容的长度     .read()没有数据返回-1
            int len;

            // 循环读取文件中的所有内容
            while ((len = fileInputStream.read(buf)) != -1){
                // 读取到的内容会被放到前面定义好的byte数组中
                System.out.println(new String(buf));
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

方案二:

byte[] bytes = fileInputStream.readAllBytes();

读取全部内容。

.readAllBytes();在jdk1.8以后才有。

一次性读取文件中全部的内容,如果文件内存过大会导致内存溢出,不建议使用!!!

案例: 一次性读取全部内容

package com.zsh;

import java.io.FileInputStream;
import java.io.IOException;

/**
 * IO字节输入流
 */
public class IoInputStream {
    public static void main(String[] args) {
        try (
                // 创建文件字节输入流管道,与源文件接通。
                FileInputStream fileInputStream = new FileInputStream("../io-demo/abc/2.txt")
        ) {
            // 一次性读取全部内容
            byte[] bytes = fileInputStream.readAllBytes();
            System.out.println(new String(bytes));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

关闭输入流

方案一:

fileInputStream.close();

手动关闭输入流。

// 案例
// 定义FileInputStream对象
FileInputStream fileInputStream = null;
// 创建文件字节输入流管道,与源文件接通。
try {
    fileInputStream = new FileInputStream("../io-demo/abc/2.txt");
} catch (FileNotFoundException e) {
    System.out.println("找不到文件");
} finally {
    if(fileInputStream != null){
        try {
            // 关闭字节输入流
            fileInputStream.close();
        } catch (IOException e) {
            System.out.println("文件读取异常");
        }
    }
}

方案二:

把FileInputStream fileInputStream = new FileInputStream("../io-demo/abc/2.txt");放到try-with-resources中可以不用手动关闭流。

选中FileInputStream fileInputStream = new FileInputStream(String str);按crtl + alt + t,选择try-with-resources即可。

只要是继承了AutoCloseable接口的类,就可以放到try的()中,不用手动.close();

只需要在catch中处理异常即可。

// 案例
try (
    // 创建文件字节输入流管道,与源文件接通。
    FileInputStream fileInputStream = new FileInputStream("../io-demo/abc/2.txt");
) {
    // 这里正常写代码逻辑



} catch (IOException e) {
    System.out.println("文件读取异常");
}

字节输出流

获取字节输出流

FileOutputStream fileOutputStream= new FileOutputStream(String str,boolean append);

如果文件不存在则会创建文件。

str:文件输出的地址路径,要保存到哪。

append:可以设置为true,默认是false,设置为true以后,文件写入不会顶替掉之前的内容,而是继续追加内容。

// 案例
// 创建文件
FileOutputStream fileOutputStream = new FileOutputStream("../io-demo/abc/2.txt");

// 不覆盖文件内的内容,继续向文件中追加内容
FileOutputStream fileOutputStream = new FileOutputStream("../io-demo/abc/2.txt",true);

方案一:

fileOutputStream.write(int i);

写入单个字节。

i:要写入的内容

案例: 写入单个字节

package com.zsh;

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

/**
 * IO字节输出流
 */
public class IoOutStream {
    public static void main(String[] args) {
        try (
                // 获取字节输出流
                FileOutputStream fileOutputStream = new FileOutputStream("../io-demo/abc/3.txt", true);
        ) {
            // 写入单个字节
            fileOutputStream.write(97);
            fileOutputStream.write(98);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

方案二:

fileOutputStream.write(byte[] b);

byte数组写入文件。

b:要写入的字节数组。

案例:byte数组写入文件

package com.zsh;

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

/**
 * IO字节输出流
 */
public class IoOutStream {
    public static void main(String[] args) {
        try (
                // 获取字节输出流
                FileOutputStream fileOutputStream = new FileOutputStream("../io-demo/abc/3.txt", true);
        ) {
            // byte写入文件
            byte[] bytes = new byte[]{66,67,68,69,70};
            fileOutputStream.write(bytes);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

方案三:

fileOutputStream.write(byte[] b,int off,int len);

根据下标写入数据。

b:要写入的字节数组。

off:要从数组的第几位下标开始写。

len:截至到哪。

案例:根据下标写入数组中的内容

package com.zsh;

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

/**
 * IO字节输出流
 */
public class IoOutStream {
    public static void main(String[] args) {
        try (
                // 获取字节输出流
                FileOutputStream fileOutputStream = new FileOutputStream("../io-demo/abc/3.txt", true);
        ) {
            // byte写入文件
            byte[] bytes = new byte[]{66,67,68,69,70};
            // 根据下标写入数组中的内容
            fileOutputStream.write(bytes,0,2);    // 写入66,67
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

换行符

fileOutputStream.write("\r\n".getBytes());

案例:

fileOutputStream.write("\r\n".getBytes());

刷新

fileOutputStream.flush();

这个是刷新,与.close();关闭有所不同。

写入内容如果不刷新也不关闭流,写入的内容不会保存到文件中,而是存储在内存中,文件中是看不到的。只有刷新或者关闭流,写入的内容才会到文件中。

刷新之后还可以继续写入内容,关闭之后不能写入内容。

案例:

// 调用write方法写数据,写入单个数据
fileOutputStream.write(97);
fileOutputStream.write(98);
        
// 刷新(将当前写入的内容保存到文件)
fileOutputStream.flush();

// 调用write方法写数据,写入单个数据
fileOutputStream.write(99);
fileOutputStream.write(100);

// 刷新(将当前写入的内容保存到文件)
fileOutputStream.flush();

关闭输出流

方案一:

fileOutputStream.close();

手动关闭输出流。

// 案例
// 定义FileInputStream对象
FileOutputStream fileOutputStream = null;
// 创建文件字节输入流管道,与源文件接通。
try {
    fileOutputStream = new FileOutputStream("../io-demo/abc/2.txt");
} catch (FileNotFoundException e) {
    System.out.println("找不到文件");
} finally {
    if(fileOutputStream != null){
        try {
            // 关闭字节输入流
            fileOutputStream.close();
        } catch (IOException e) {
            System.out.println("文件写入异常");
        }
    }
}

方案二:

把FileOutputStream fileOutputStream = new FileOutputStream("../io-demo/abc/1.txt",true);放到try-with-resources中可以不用手动关闭流。

选中FileOutputStream fileOutputStream = new FileOutputStream("../io-demo/abc/1.txt",true);按crtl + alt + t,选择try-with-resources即可。

只要是继承了AutoCloseable接口的类,就可以放到try的()中,不用手动.close();

只需要在catch中处理异常即可。

// 案例
try (
    // 创建文件字节输入流管道,与源文件接通。
    FileOutputStream fileOutputStream = new FileOutputStream("../io-demo/abc/1.txt",true);
) {
    // 这里正常写代码逻辑



} catch (IOException e) {
    System.out.println("文件写入异常");
}

字符流输入流

获取字符输入流

FileReader fileReader = new FileReader(String str);

str:文件的路径地址。

// 案例
FileReader fileReader = new FileReader("abc/FileWriter.txt");

方案一:

int len = fileReader.read(char[] cbuf);

len:当前读取字符的个数。

cbuf:char数组,每次读取几个字符取决于自定义的char数组,读取到内容后,会当如定义好的char数组(不设置默认读取1个字符)。

案例:按照数组大小读取内容

package com.zsh;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
 * 字符流输入流
 */
public class IoFileInputDemo {
    public static void main(String[] args) {
        try (
                // 获取字符输入流对象
                FileReader fileReader = new FileReader("abc/FileWriter.txt");
        ) {
            // 定义char数组,设置一次读取多少字符(当前每次从文件中读取3个字符出来)
            char[] txt = new char[3];

            // 定义变量,接受当前读取内容的长度 .read()没有数据返回-1
            int len;

            // 循环读取文件中的所有内容
            while ((len = fileReader.read(txt)) != -1){
                // 读取道德内容会被放到前面定义好的char数组中
                System.out.println(txt);
            }
        } catch (IOException e) {
            System.out.println("文件读取异常");
        }
    }
}

关闭输入流

方案一:

fileReader.close();

手动关闭输入流。

// 案例
// 定义FileReader对象
FileReader fileReader = null;
// 创建文件字节输入流管道,与源文件接通。
try {
    FileReader = new FileReader("abc/FileWriter.txt");
} catch (FileNotFoundException e) {
    System.out.println("找不到文件");
} finally {
    if(fileReader != null){
        try {
            // 关闭字符输入流
            fileReader.close();
        } catch (IOException e) {
            System.out.println("文件读取异常");
        }
    }
}

方案二:

把FileReader fileReader = new FileReader("abc/FileWriter.txt");放到try-with-resources中可以不用手动关闭流。

选中FileReader fileReader = new FileReader("abc/FileWriter.txt");按crtl + alt + t,选择try-with-resources即可。

只要是继承了AutoCloseable接口的类,就可以放到try的()中,不用手动.close();

只需要在catch中处理异常即可。

package com.zsh;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
 * 字符流输入流
 */
public class IoFileInputDemo {
    public static void main(String[] args) {
        try (
                // 获取字符输入流对象
                FileReader fileReader = new FileReader("abc/FileWriter.txt");
        ) {
            // 这里正常写代码逻辑



        } catch (IOException e) {
            System.out.println("文件读取异常");
        }
    }
}

字符输出流

获取字符输出流

FileWriter fileWriter = new FileWriter(String str,boolean append);

如果文件不存在则会创建文件。

str:文件输出的地址路径,要保存到哪。

append:可以设置为true,默认是false,设置为true以后,文件写入不会顶替掉之前的内容,而是继续追加内容。

// 案例
// 创建文件
FileWriter fileWriter = new FileWriter("abc/FileWriter2.txt");

// 不覆盖文件内的内容,继续向文件中追加内容
FileWriter fileWriter = new FileWriter("abc/FileWriter2.txt",true);

方案一:

fileWriter.write(String str);

字符串写入文件。

str:要写入的字符串。

案例:字符串写入文件

package com.zsh;

import java.io.FileWriter;
import java.io.IOException;

/**
 * 字符输出流
 */
public class IoFileOutDemo {
    public static void main(String[] args) {
        try (
                FileWriter fileWriter = new FileWriter("abc/FileWriter2.txt");
        ) {
            // 字符串写入文件
            fileWriter.write("你的代码爆红了!!!");
        } catch (IOException e) {
            System.out.println("文件写入异常");
        }
    }
}

方案二:

fileWriter.write(char[] cbuf);

byte数组写入文件。

cbuf:要写入的数组

案例:byte数组写入文件

package com.zsh;

import java.io.FileWriter;
import java.io.IOException;

/**
 * 字符输出流
 */
public class IoFileOutDemo {
    public static void main(String[] args) {
        try (
                FileWriter fileWriter = new FileWriter("abc/FileWriter2.txt");
        ) {
            // char数组写入文件
            fileWriter.write("123".toCharArray());
        } catch (IOException e) {
            System.out.println("文件写入异常");
        }
    }
}

换行符

fileWriter.write("\r\n".getBytes());

案例:

fileWriter.write("\r\n");

刷新

fileWriter.flush();

这个是刷新,与.close();关闭有所不同。

写入内容如果不刷新也不关闭流,写入的内容不会保存到文件中,而是存储在内存中,文件中是看不到的。只有刷新或者关闭流,写入的内容才会到文件中。

刷新之后还可以继续写入内容,关闭之后不能写入内容。

案例:

// 调用write方法写数据,写入数据
fileWriter.write("你的代码报红了!!!");
fileWriter.write("123");
        
// 刷新(将当前写入的内容保存到文件)
fileWriter.flush();

// 调用write方法写数据,写入数据
fileWriter.write("你的代码正在运行!!!");
fileWriter.write("123");

// 刷新(将当前写入的内容保存到文件)
fileWriter.flush();

关闭输出流

方案一:

fileWriter.close();

手动关闭输出流。

// 案例
// 定义FileReader对象
FileWriter fileWriter = null;
// 创建文件字节输入流管道,与源文件接通。
try {
    fileWriter = new FileWriter("abc/FileWriter.txt");
} catch (FileNotFoundException e) {
    System.out.println("找不到文件");
} finally {
    if(fileReader != null){
        try {
            // 关闭字符输入流
            fileWriter.close();
        } catch (IOException e) {
            System.out.println("文件写入异常");
        }
    }
}

方案二:

把FileWriter fileWriter = new FileWriter("abc/FileWriter2.txt");放到try-with-resources中可以不用手动关闭流。

选中FileWriter fileWriter = new FileWriter("abc/FileWriter2.txt");按crtl + alt + t,选择try-with-resources即可。

只要是继承了AutoCloseable接口的类,就可以放到try的()中,不用手动.close();

只需要在catch中处理异常即可。

package com.zsh;

import java.io.FileWriter;
import java.io.IOException;

/**
 * 字符输出流
 */
public class IoFileOutDemo {
    public static void main(String[] args) {
        try (
                FileWriter fileWriter = new FileWriter("");
        ) {
            // 这里正常处理代码


        } catch (IOException e) {
            System.out.println("文件写入异常");
        }
    }
}

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

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

相关文章

并查集与LRUCache(Java数据结构)

前言: 学习过二叉树之后就应该知道了如何构建一颗二叉树,双亲结点和孩子节点的关系,甚至可以放在顺序表中去构建一棵二叉树! 接下来我们要以另一种方式去组织一棵树: 如何表示一棵树之间的关系?(这棵…

Nature Communications|基于深度学习的HE染色组织向特殊染色的转换

工作速览 病理学是通过视觉检查组织切片来进行的,这些切片通常用组织化学染色法染色。虽然苏木精和伊红(H&E)染色最为常用,但特殊染色可以为不同的组织成分提供额外的对比度。 **在这里,作者展示了从H&E染色…

阿里国际2025届校园招聘 0826算法岗笔试

目录 1. 第一题2. 第二题3. 第三题 ⏰ 时间:2024/08/26 🔄 输入输出:ACM格式 ⏳ 时长:100min 本试卷分为单选,多选,编程三部分,这里只展示编程题。 1. 第一题 题目描述 小红有一个大小为 n …

goframe开发一个企业网站 模版界面5

html或者说是模板的控制 以下是是系统的设置 server:address: ":8000"serverRoot: "resource/public" #这里要加上,为以后的静态文件的引入准备openapiPath: "/api.json"swaggerPath: "/swagger"cookieMaxAge: "365…

适配器模式:类适配器与对象适配器

适配器模式是一种结构性设计模式,旨在将一个接口转换成客户端所期望的另一种接口。它通常用于解决由于接口不兼容而导致的类之间的通信问题。适配器模式主要有两种实现方式:类适配器和对象适配器。下面,我们将详细探讨这两种方式的优缺点及适…

如何在Linux系统中使用Ansible进行自动化部署

如何在Linux系统中使用Ansible进行自动化部署 Ansible简介 安装Ansible 在Debian/Ubuntu系统中安装 在CentOS/RHEL系统中安装 Ansible的基本概念 Inventory文件 Playbooks Modules 创建Inventory文件 编写第一个Playbook 创建Playbook文件 运行Playbook 使用Handlers 编写包…

Spring Boot 3.x 整合 Druid 数据库连接池(含密码加密)

Spring Boot 3.x 整合 Druid 数据库连接池(含密码加密) 1. 为什么需要数据库连接池? 在传统的数据库连接中,每一次与数据库连接都会消耗大量的系统资源和时间。数据库连接池会提前创建一定数量的数据库连接保存在池中&#xff0…

【论文#码率控制】Rate Control for H.264 Video With Enhanced Rate and Distortion Models

目录 摘要1.前言2.编码器框架3.增强RD模型3.1 头部比特的速率模型3.2 源比特的码率模型3.3 失真模型3.4 块类型的确定 4.面向H264 Baseline Profile的码率控制算法5.实验结果6.结论和未来工作 《Rate Control for H.264 Video With Enhanced Rate and Distortion Models》 Auth…

vue和django接口联调

vue访问服务端接口 配置跨域 前端跨域 打开vite.config.js,在和resolve同级的地方添加配置。 proxy代表代理的意思 "/api"是以/api开头的路径走这个配置 target代表目标 changeOrigin: true,是开启跨域请求 rewrite是编辑路径。 (path) > pa…

HTML鼠标移动的波浪线动画——页面将会初始化一个Canvas元素,并使用JavaScript代码在Canvas上绘制响应鼠标移动的波浪线动画

代码如下 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Wave Animation</title><style&…

玩转Docker | Docker基础入门与常用命令指南

玩转Docker | Docker基础入门与常用命令指南 引言基本概念help帮助信息常用命令管理镜像运行容器构建镜像其他Docker命令整理结语引言 Docker 是一种开源的应用容器引擎,它允许开发者将应用程序及其依赖打包进一个可移植的容器中,然后发布到任何流行的 Linux 机器上。这大大简…

信息学科平台设计与实现:Spring Boot技术详解

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

现代化水电管理:Spring Boot在大学城的实践

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

Rust 力扣 - 289. 生命游戏

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们记录上一行和当前行转换之后的状态&#xff0c;当前行转换之后的状态计算完毕后调整上一行状态&#xff0c;直至最后一行状态计算完毕后调整最后一行状态 题解代码 pub fn game_of_life(board: &mut V…

015:地理信息系统开发平台ArcGIS Engine10.2与ArcGIS SDK for the Microsoft .NET Framework安装教程

摘要&#xff1a;本文详细介绍地理信息系统开发平台ArcGIS Engine10.2与ArcGIS SDK for the Microsoft .NET Framework的安装流程。 一、软件介绍 ArcGIS Engine 10.2是由Esri公司开发的一款强大的GIS&#xff08;地理信息系统&#xff09;开发平台。该软件基于ArcGIS 10.2 fo…

如何进行PDF高效合并?盘点11款PDF编辑器给你

是不是经常觉得烦&#xff1a;一个PDF文件特别长&#xff0c;里面好多章节或者报告&#xff0c;每次要看或者给别人发都得翻半天&#xff1f;别担心&#xff0c;今天我就来教你们几个合并PDF的小技巧&#xff0c;保证让你在2024年变成整理文件的高手&#xff01; 1、福昕PDF文…

PPT素材、模板免费下载!

做PPT一定要收藏好这6个网站&#xff0c;PPT模板、素材、图表、背景等超多素材全部免费下载。 1、菜鸟图库 ppt模板免费下载|ppt背景图片 - 菜鸟图库 菜鸟图库网有非常丰富的免费素材&#xff0c;像设计类、办公类、自媒体类等素材都很丰富。PPT模板种类很多&#xff0c;全部都…

Cpp二叉搜索树的讲解与实现(21)

文章目录 前言一、二叉搜索树的概念定义特点 二、二叉树的实现基本框架查找插入删除当只有0 ~ 1个孩子的时候当有2个孩子的时候 三、二叉树的应用K模型KV模型 四、二叉树的性能分析总结 前言 这是全新的一个篇章呢&#xff0c;二叉搜索树是我们接下来学习set、map的前提 迈过它…

群控系统服务端开发模式-应用开发-菜单功能开发

为什么优先开发菜单&#xff0c;而不是优先开发管理员&#xff1f;查看一下程序草图就明白&#xff0c;还有一个重点就是&#xff0c;管理员需要添加图片&#xff0c;而我还没有封装上传工具及上传目标。 一、添加路由 在根目录下route文件夹下的app.php文件里面&#xff0c;添…

2024年,Rust开发语言,现在怎么样了?

Rust开发语言有着一些其他语言明显的优势&#xff0c;但也充满着争议&#xff0c;难上手、学习陡峭等。 Rust 是由 Mozilla 主导开发的通用、编译型编程语言&#xff0c;2010年首次公开。 在 Stack Overflow 的年度开发者调查报告中&#xff0c;Rust 连续多年被评为“最受喜爱…