Java基础-I/O流

news/2024/11/6 5:09:53 标签: java, 开发语言

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)

目录

字节流

定义

说明

InputStream与OutputStream示意图

说明

InputStream的常用方法

说明

OutputStream的常用方法 

说明

InputStream与OutputStream的继承体系

字节流读写文件 

说明

文件的拷贝


字节流

定义

在计算机中,无论是文本、图片、音频还是视频,所有文件都是以二进制(字节)形式存在的,I/O流中针对字节的输入/输出提供了一系列的流,统称为字节流。

说明

字节流是程序中最常用的流。
在JDK中,所有的字节输入流都继承自InputStream,所有的字节输出流都继承自OutputStream。

InputStream与OutputStream示意图

说明

InputStream被看成一个输入管道,OutputStream被看成一个输出管道,
数据通过InputStream从源设备输入到程序,通过OutputStream从程序输出到目标设备,从而实现数据的传输。 

InputStream的常用方法

说明

前三个read()方法都是用来读数据的,分按字节读取和按字节数组读取。
进行I/O流操作时,应该调用close()方法关闭流,从而释放当前I/O流所占的系统资源。

OutputStream的常用方法 

说明

前三个write()方法都是用来写数据的,分按字节读取和按字节数组写入。
flush()方法用来将当前输出流缓冲区(通常是字节数组)中的数据强制写入目标设备,此过程称为刷新。
close()方法是用来关闭流并释放与当前IO流相关的系统资源。

InputStream与OutputStream的继承体系

字节流读写文件 

说明

针对文件的读写操作,JDK专门提供了两个类,分别是FileInputStream和FileOutputStream。
FileInputStream是InputStream的子类,它是操作文件的字节输入流,专门用于读取文件中的数据。
从文件读取数据是重复的操作,因此需要通过循环语句来实现数据的持续读取

示例(读取包含“hello”内容的txt文件)

java">FileInputStream in = new FileInputStream("test.txt");
int b = 0;
while((b=in.read()) != -1){
    System.out.println(b); 
}
in.close();

注意: 

在读取文件数据时,必须保证文件在相应目录存在并且是可读的,否则会抛出
FileNotFoundException。

示例(向txt文件写入数据)

java">FileOutputStream out = new FileOutputStream("out.txt");
String str = "hello";
out.write(str.getBytes());
out.close();

注意:通过FileOutputStream向一个已经存在的文件中写入数据,该文件中的数据首先会被清空,再写入新的数据。若希望在已存在的文件内容之后追加新内容,则可使用构造函数FileOutputStream(String fileName, boolean append)来创建文件输出流对象,并把append参数的值设置为true。

java">FileOutputStream out = new FileOutputStream("out.txt",true);
String str = " world";
out.write(str.getBytes());
out.close();

注意:I/O流在进行数据读写操作时会出现异常,为了保证I/O流的close()方法一定执行来释放占用的系统资源,通常会将关闭流的操作写在finally代码块中。 

java">finally{
    try{
        if(in!=null) in.close();
    }catch(Exception e){
        e.printStackTrace();
    }
    try{
        if(out!=null) out.close();
    }catch(Exception e){
        e.printStackTrace();
    }
}

文件的拷贝

说明

l/O流通常都是成对出现的,即输入流和输出流一起使用。例如文件的拷贝就需要通过输入流来读取源文件中的数据,并通过输出流将数据写入新文件。

java">FilelnputStream in new FilelnputStream("source/src.jpg");
FileOutputStream out new FileOutputStream("target/dest.jpg"):
int len =0;
long beginTime System.currentTimeMillis():
while ((len = in.read() !=-1){
    out.write(len);
}
long endTime System.currentTimeMillis();
System.out.println("花费时间为:"+(endTime-be gin Time)+"毫秒")
in.close();
out.close();

说明:上述示例在拷贝过程中,通过whil循环将字节逐个进行拷贝。在拷贝文件时,由于计算机性能等各方面原因,会导致拷贝文件所消耗的时间不确定,因此每次运行程序的结果并不一定相同。


http://www.niftyadmin.cn/n/5740220.html

相关文章

开源模型应用落地-glm模型小试-glm-4-9b-chat-Gradio集成(三)

一、前言 GLM-4是智谱AI团队于2024年1月16日发布的基座大模型,旨在自动理解和规划用户的复杂指令,并能调用网页浏览器。其功能包括数据分析、图表创建、PPT生成等,支持128K的上下文窗口,使其在长文本处理和精度召回方面表现优异&a…

SparkSql读取数据的方式

一、读取普通文件 方式一:给定读取数据源的类型和地址 spark.read.format("json").load(path) spark.read.format("csv").load(path) spark.read.format("parquet").load(path) 方式二:直接调用对应数据源类型的方法 …

「Mac畅玩鸿蒙与硬件29」UI互动应用篇6 - 多选问卷小应用

本篇将带你实现一个多选问卷小应用,用户可以勾选选项并点击提交按钮查看选择的结果。通过本教程,你将学习如何使用 Checkbox 组件、动态渲染列表、状态管理及用户交互,构建完整的应用程序。 关键词 UI互动应用Checkbox 组件状态管理动态列表…

黄山谷捷:以创新为翼,领航新能源汽车散热基板行业

在竞争激烈的市场环境中,创新被视为企业发展的灵魂和生命线,是推动持续成长、保持竞争力的关键要素。作为专注于功率半导体模块散热基板研发、生产和销售的高新技术企业,黄山谷捷股份有限公司具有优秀的创新文化和基因,为公司的高…

前后端交互通用排序策略

目录 排序场景 排序实现思路 1. 静态代码排序实现 2.数据库驱动排序实现 3. 基于Java反射的动态排序实现 通用排序工具 SortListUtil 结语 排序场景 在面向前端数据展示的应用场景中,我们旨在实现一个更加灵活的排序机制,该机制能够支持对从后端传递…

大模型算法工程师经典面试题————Transformer中 前馈层(FFN) 的作用是什么?

什么是 前馈层(FFN)? Transformer的前馈层通常包含哪些组件? Transformer中 前馈层(FFN) 的作用是什么? 什么是 前馈层(FFN)? 前馈层(FFN)本质上就是一…

【LuatOS】修改LuatOS源码为PC模拟器添加高精度时间戳库timeplus

0x00 缘起 LuatOS以及Lua能够提供微秒或者毫秒的时间戳获取工具,但并没有提供获取纳秒的工具。通过编辑LuatOS源码以及相关BSP源码,添加能够获取纳秒的timeplus库并重新编译,以解决在64位Windows操作系统中LuatOS模拟器获取纳秒的问题&#…

51单片机教程(八)- 数码管的静态显示

1、项目分析 使用数码管显示指定的字符、数字和符号。 2、技术准备 1、显示器及其接口 单片机系统中常用的显示器有: 发光二极管LED(Light Emitting Diode)显示器、液晶LCD(Liquid Crystal Display)显示器、CRT显…