Java—— IO流 第一期

什么是IO流

存储和读取数据的解决方案
I:input
O:output
流:像水流一样传输数据

IO流的作用

用于读写数据(本地文件,网络)

IO流的分类

按照流向分类

输出流:程序 --> 文件
输入流:文件 --> 程序

按照操作文件的类型分类
字节流:可以操作所有类型的文件
字符流:只能操作纯文本文件(用windows系统自带的记事本打开并且能读懂的文件,例如txt文件,md文件,xml文件,lrc文件等)

字节流的实现类

操作本地文件的字节输出流FileOutputStream

可以把程序中的数据写到本地文件中

 书写步骤及细节

1.创建字节输出流对象

        参数是字符串表示的路径或者File对象都是可以的
        如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的。
        如果文件已经存在,则会清空文件重新写
2.写数据

        使用write方法,参数为整数,但实际上写到本地文件中的是整数在ASCII上对应的字符
3.释放资源 

        每次使用完流之后都要释放资源 

代码演示

import java.io.FileOutputStream;
import java.io.IOException;public class Test1 {public static void main(String[] args) throws IOException {FileOutputStream fos = new FileOutputStream("day04\\a.txt");fos.write(97);fos.close();}
}

如何一次写入多个数据
方法名称说明
void write(int b)一次写一个字节数据
void write(byte[] b)一次写一个字节数组数据
void write(byte[] b, int off, int len)一次写一个字节数组的部分数据

代码演示

import java.io.FileOutputStream;
import java.io.IOException;public class Test2 {public static void main(String[] args) throws IOException {//一次写一个字节数组数据//有两种定义数据的形式//直接定义byte数组,将想写入的数据的ASCII码存入数组FileOutputStream fos1 = new FileOutputStream("day04\\a.txt");byte[] b1 = {97,98,99,100};fos1.write(b1);fos1.close();//以字符串的形式定义想写入的数据,再将字符串转换为byte数组FileOutputStream fos2 = new FileOutputStream("day04\\a.txt");String str = "asdfg";byte[] b2 = str.getBytes();fos2.write(b2);fos2.close();//一次写一个字节数组的部分数据//第二个参数是字节数组的起始索引//第三个参数是要写入数据的个数FileOutputStream fos3 = new FileOutputStream("day04\\a.txt");byte[] b3 = {97,98,99,100,101,102};fos3.write(b3,1,3);fos3.close();}
}

如何换行写

换行写:使用换行符
windows:\r\n
Linux:\n
Mac:\r
细节:
在windows操作系统当中,java对回车换行进行了优化。
虽然完整的是\r\n,但是我们写其中一个\r或者\n,也可以实现换行,java在底层会补全
建议:不要省略,还是写全了

代码演示

import java.io.FileOutputStream;
import java.io.IOException;public class Test3 {public static void main(String[] args) throws IOException {FileOutputStream fos = new FileOutputStream("day04\\a.txt");String str1 = "abcd";byte[] b1 = str1.getBytes();fos.write(b1);String wrap = "\r\n";byte[] b2 = wrap.getBytes();fos.write(b2);String str3 = "efgh";byte[] b3 = str3.getBytes();fos.write(b3);fos.close();}
}

 

如何续写

如果想要续写,打开续写开关即可
开关位置:创建字节输出流对象的第二个参数
不写默认false:表示关闭续写,此时创建字节输出流对象会清空文件
手动传递true:表示打开续写,此时创建字节输出流对象不会清空文件

代码演示

import java.io.FileOutputStream;
import java.io.IOException;public class Test4 {public static void main(String[] args) throws IOException {FileOutputStream fos1 = new FileOutputStream("day04\\a.txt");String str1 = "abcd";byte[] b1 = str1.getBytes();fos1.write(b1);fos1.close();FileOutputStream fos2 = new FileOutputStream("day04\\a.txt",true);String str2 = "efgh";byte[] b2 = str2.getBytes();fos2.write(b2);fos2.close();}
}

 

操作本地文件的字节输入流FilelnputStream

可以把本地文件中的数据读取到程序中来

书写步骤及细节

1.创建字节输入流对象

        如果文件不存在,就直接报错
2.读数据

        利用read方法读数据,读出来的是数据在ASCII上对应的数字
        读到文件末尾读不到数据时,read方法返回-1
3.释放资源

        每次使用完流必须要释放资源。

代码演示

import java.io.FileInputStream;
import java.io.IOException;public class Test5 {public static void main(String[] args) throws IOException {FileInputStream fis = new FileInputStream("day04\\a.txt");int b;//空参read一次只能读取一个数据,利用循环进行读取//直到读到末尾读不到数据时返回-1,结束循环while ((b = fis.read()) != -1) {//读到的数据是ASCII字符对应的整数//通过char转化为字符类型System.out.print((char) b);}//abcdefgfis.close();}
}
如何一次读取多个数据
方法名称说明
public int read()一次读一个字节数据
public int read(byte[] buffer)

一次读一个字节数组数据

每次读取会尽可能把数组装满

返回读取到的数据个数,读不到返回-1

读取的数据字符在byte数组中

代码演示

import java.io.FileInputStream;
import java.io.IOException;public class Test6 {public static void main(String[] args) throws IOException {FileInputStream fis = new FileInputStream("day04\\a.txt");//定义字节数组接收数据byte[] b = new byte[3];int len;//返回读取到的数据个数,读不到返回-1,用len记录while ((len = fis.read(b)) != -1) {//读取的数据会存放在byte数组中//新一轮读取的数据会覆盖在byte数组中的旧数据//最后一次读取时,会出现数据读不满byte数组的情况//此时,byte数组中后面的部分数据不会被覆盖//所以需要len(读取到的数据个数),读取几个输出几个String str = new String(b, 0, len);System.out.println(str);}//abc//def//gfis.close();}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

物联网安全技术的最新进展与挑战

随着物联网(IoT)技术的飞速发展,越来越多的设备被连接到互联网,从智能家居设备到工业控制系统,物联网正在深刻改变我们的生活和生产方式。然而,物联网的安全问题也日益凸显,成为制约其发展的关键…

【深度学习基础】损失函数与优化算法详解:从理论到实践

【深度学习基础】损失函数与优化算法详解:从理论到实践 一、引言 1. 损失函数与优化算法在深度学习中的核心作用 在深度学习中,模型训练的本质是通过不断调整参数,使模型输出尽可能接近真实值。这一过程的核心驱动力是损失函数(…

mvc-review

review: 1.Servlet生命周期中初始化方法:init(),init(config) public void init(ServletConfig config) throws ServletException { this.config config; this.init(); } 因此,如果我们需要…

YouTube视频字幕转成文章算重复内容吗?

很多创作者误以为「自己说的话不算抄袭」,却不知道YouTube自动生成的字幕早已被搜索引擎存档。 去年就有案例:某美食博主将教程视频字幕转为图文,结果原创度检测仅42%,导致页面权重暴跌。 本文揭秘5个实操技巧:从删除…

R语言数据可视化

R note book 文档–输出html格式文档,plotly不能生成PDF文件 --- title: "R语言数据可视化" output: html_notebook ---在R语言中进行数据可视化是数据分析和呈现的重要环节,R提供了多种强大的绘图系统和工具。以下是常见的数据可视化方法和示…

Axure难点解决分享:垂直菜单展开与收回(4大核心问题与专家级解决方案)

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢!如有帮助请订阅专栏! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:垂直菜单展开与收回 主要内容:超长菜单实现、展开与收回bug解释、Axure9版本限制等问题解…

云原生攻防2(Docker基础补充)

Docker基础入门 容器介绍 Docker是什么 Docker是基于Linux内核实现,最早是采用了 LXC技术,后来Docker自己研发了runc技术运行容器。 它基于Google Go语言实现,采用客户端/服务端架构,使用API来管理和创建容器。 虚拟机 VS Docker Namespace 内核命名空间属于容器非常核…

Spring Boot 拦截器:解锁5大实用场景

一、Spring Boot中拦截器是什么 在Spring Boot中,拦截器(Interceptor)是一种基于AOP(面向切面编程)思想的组件,用于在请求处理前后插入自定义逻辑,实现权限校验、日志记录、性能监控等非业务功能…

Vue百日学习计划Day24-28天详细计划-Gemini版

总目标: 在 Day 24-27 熟练掌握 Vue.js 的各种模板语法,包括文本插值、属性绑定、条件渲染、列表渲染、事件处理和表单绑定,并能结合使用修饰符。 所需资源: Vue 3 官方文档 (模板语法): https://cn.vuejs.org/guide/essentials/template-syntax.htmlVu…

分布式微服务系统架构第125集:AI大模型

加群联系作者vx:xiaoda0423 仓库地址:https://webvueblog.github.io/JavaPlusDoc/ https://1024bat.cn/ 一、user 表(用户表) sql 复制编辑 create table if not exists user (id bigint auto_increment comment id pri…

机器学习 Day16 聚类算法 ,数据降维

聚类算法 1.简介 1.1 聚类概念 无监督学习:聚类是一种无监督学习算法,不需要预先标记的训练数据 相似性分组:根据样本之间的相似性自动将样本归到不同类别 相似度度量:常用欧式距离作为相似度计算方法 1.2 聚类vs分类 聚类&…

【Linux】第十八章 调优系统性能

1. 系统管理员可以使用哪个命令来更改tuned守护进程的设置? tuned 的调优配置集存储在 /usr/lib/tuned(默认) 和 /etc/tuned(自定义 或当前有效)目录下。每个配置集都有一个单独的目录,目录中包含 tuned.c…

【JVS更新日志】企业文档AI助手上线、低代码、智能BI、智能APS、AI助手5.14更新说明!

项目介绍 JVS是企业级数字化服务构建的基础脚手架,主要解决企业信息化项目交付难、实施效率低、开发成本高的问题,采用微服务配置化的方式,提供了低代码数据分析物联网的核心能力产品,并构建了协同办公、企业常用的管理工具等&…

ollama调用千问2.5-vl视频图片UI界面小程序分享

1、问题描述: ollama调用千问2.5-vl视频图片内容,通常用命令行工具不方便,于是做了一个python UI界面与大家分享。需要提前安装ollama,并下载千问qwen2.5vl:7b 模型,在ollama官网即可下载。 (8G-6G 显卡可…

Web 架构之会话保持深度解析

文章目录 一、引言二、会话保持的基本概念2.1 什么是会话2.2 为什么需要会话保持 三、会话保持的常见实现方式3.1 基于客户端的会话保持3.1.1 Cookie 方式3.1.2 URL 重写方式 3.2 基于服务器端的会话保持3.2.1 负载均衡器会话保持3.2.2 会话共享 四、会话保持可能遇到的问题及解…

Maven 项目中将本地依赖库打包到最终的 JAR 中

文章目录 前言详细步骤 前言 在现代后端开发中,构建高效且可扩展的 Web 应用程序通常依赖于多种第三方库和内部依赖。这些依赖可以来自公共仓库,也可能是公司内部自研的库或尚未发布到公共仓库的 JAR 包。本文将详细介绍如何在 Maven 项目中处理本地依赖…

快速定位到源码位置的插件 - vite/webpack

1. vite-plugin-vue-devtools npm i vite-plugin-vue-devtools -D vite.config.js中配置 import vueDevTools from vite-plugin-vue-devtoolsexport default defineConfig({server: {port: 5173,host: 0.0.0.0},plugins: [vue(),vueJsx(),vueDevTools({componentInspector: t…

基于AH1101芯片的5V升18.6V LED恒流背光供电方案设计

基于AH1101芯片的5V升18.6V LED恒流背光供电方案设计 在现代电子设备中,LED背光技术因其高效、节能、寿命长等优点被广泛应用于各类显示设备。本文将详细介绍如何利用AH1101高效升压恒流驱动芯片,实现从5V输入电压升压至18.6V,为LED背光板提供…

16.1 - VDMA视频转发实验之TPG

文章目录 1 实验任务2 系统框图3 硬件设计3.1 IP核配置3.2 注意事项 4 软件设计4.1 注意事项4.2 工程源码4.2.1 main.c文件 1 实验任务 基于14.1,使用Xilinx TPG(Test Pattern Generator) IP提供视频源,将视频数据通过VDMA写入PS…

认识Docker/安装Docker

一、认识Docker Docker的定义 Docker 是一个开源的应用容器引擎,允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中。容器化技术使得应用可以在任何支持 Docker 的环境中运行,确保环境一致性。 Docker的核心组件 Docker Engine:负责…