当前位置: 首页 > news >正文

Java后端开发day41--IO流(一)--FileOutputStreamFileInputStream

请添加图片描述
(以下内容全部来自上述课程)
在这里插入图片描述

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

1. 流的分类

请添加图片描述
纯文本文件:Windows自带的记事本打开就能读懂

2. IO流的体系

请添加图片描述

3 字节流

请添加图片描述

3.1 FileOutputStream

操作本地文件的字节输出流,可以把程序中的数据写到本地文件中

3.1.1书写步骤:

  1. 创建字节输出流对象:通道
  2. 写数据:传输
  3. 释放资源:砸掉通道
//1. 创建对象
//写出 输出流 OutputStream
//本地文件  File
FileOutputStream fos = new FileOutputStream("myio\\a.txt");
//2.写出数据
fos.write(97);
//3.释放资源
fos.close();

(1)细节:

  1. 创建字节输出流对象:
  • 参数是字符串表示的路径或者是File对象都是可以的
  • 如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的
  • 如果文件已经存在,则会清空文件
  1. 写数据:
  • write方法的参数是整数,但是实际上写到本地文件中的是整数在ASCII上对应的字符
    97 – a
    ‘9‘ ’7’ – 97
  1. 释放资源
  • 每次使用完流之后都要释放资源

3.1.2 写数据的方式

请添加图片描述

  • int off:起始索引
  • int len:个数

(2)换行写和续写

str的getBytes方法可以直接返回byte[]形式的返回值
所以写出数据时如果想写入字符串的话可以:

String str = "abc"
byte[] bytes = str.getBytes();
fos.write(bytes);

换行符:
再次写一个换行符就可以了
windows:\r\n
Linux:\n
Mac:\r

String str = "abc"
byte[] bytes = str.getBytes();
fos.write(bytes);//换行符
String wrap = "\r\n"
byte[] bytes2 = wrap.getBytes();
fos.write(bytes2);String str2 = "666"
byte[] bytes3 = str2.getBytes();
fos.write(bytes3);

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

3.2 FileInputStream

操作本地文件的字节输入流,可以把本地文件中的数据读取到程序中来。

3.2.1书写步骤:

  1. 创建字节输入流对象:通道
  2. 读数据:传输
  3. 释放资源:砸掉通道
//1. 创建对象
FileInputStream fis = new FileInputStream("myio\\a.txt");
//2.读取数据
int b1 = fis.read();
System.out.println(b1);
//3.释放资源
fis.close();

(1)细节:

  1. 创建字节输入流对象:
  • 如果文件不存在,就直接报错。
  1. 读取数据:
  • 一次读一个字节,读出来的是数据在ASCII上对应的数字
  • 读到文件末尾了,read方法返回-1 空格–>32
  1. 释放资源:
  • 每次使用完流必须要释放资源

3.2.2 循环读取

//1. 创建对象
FileInputStream fis = new FileInputStream("myio\\a.txt");
//2.读取数据
int b;
while((b = fis.read()) != -1){System.out.println(char(b));
}
//3.释放资源
fis.close();

3.2.3 文件拷贝–小文件

//1. 创建对象
FileInputStream fis = new FileInputStream("D:\\it\\movie.mp4");
FileOutputStream fis = new FileOutputStream("myio\\copy.mp4");
//2.拷贝
//核心思想:边读边写
int b;
while((b = fis.read()) != -1){fos.write(b);
}
//3.释放资源
//规则:先开的最后关闭
fos.close();
fis.close();

3.2.4 读取问题–>一次读取多个字节(改进)

请添加图片描述
请添加图片描述
小弊端:正常读取两个,最后只剩下一个时可能只覆盖一个数据。
请添加图片描述
改进:固定读取的数目
请添加图片描述

3.2.5 文件拷贝–改进

//1. 创建对象
FileInputStream fis = new FileInputStream("D:\\it\\movie.mp4");
FileOutputStream fis = new FileOutputStream("myio\\copy.mp4");
//2.拷贝
int len;
byte[] bytes = new byte[1024*1024*5];
while((len = fis.read(bytes)) != -1){fos.write(bytes,0,len);
}
//3.释放资源
//规则:先开的最后关闭
fos.close();
fis.close();

相关文章:

  • 【论文阅读】DETR+Deformable DETR
  • adb无线调试步骤
  • vue+element 导航 实现例子
  • 【KWDB 创作者计划】KWDB 2.2.0多模融合架构与分布式时序引擎
  • 英伟达语音识别模型论文速读:MOSEL 数据集
  • C++类和对象之默认成员函数
  • Docker:快速搭建 Redis Cluster 集群的技术实践
  • 启发式算法-禁忌搜索算法
  • 互联网大厂Java面试:从Java SE到微服务的全栈挑战
  • 某信服EDR3.5.30.ISO安装测试(二)
  • 论高并发下的高可用
  • 数字化工厂中央控制室驾驶舱系统 - Windows 部署笔记
  • C++笔记之委托
  • VScode中关于Copilot的骚操作
  • linux crash工具详解
  • 第R8周:RNN实现阿尔兹海默病诊断(pytorch)
  • jupyter notebook运行简单程序
  • 基于EFISH-SCB-RK3576工控机/SAIL-RK3576核心板的KTV点歌主机技术方案‌(国产化替代J1900的全场景技术解析)
  • uniapp开发06-视频组件video的使用注意事项
  • 交互式入门:点击绽放的樱花树(花瓣飘落动画)
  • 中国公民免签赴马来西亚的停留天数如何计算?使馆明确
  • 重温经典|中国首部剪纸动画片《猪八戒吃瓜》创作始末
  • 世界羽联主席巴达玛:中国组织赛事的能力无与伦比
  • 巴菲特掌舵伯克希尔60年后将卸任CEO,库克:认识他是人生中最珍贵的经历之一
  • 郭少雄导演逝世,享年82岁
  • 泽连斯基拒绝普京72小时停火提议,坚持应尽快实现30天停火