java学习-第十五章-IO流(java.io包中)
一、理解
1. 简单而言:流就是内存与存储设备之间传输数据的通道、管道。
2. 分类:
(1) 按方向(以JVM虚拟机为参照物)【重点】
输入流:将中的内容读入到中。
输出流:将中的内容写入到中。
(2) 按单位:
字节流:以字节为单位,可以操作所有类型的文件。
字符流:以字符为单位,只能操作文本类型的文件。
(3) 按功能:
节点流:具有基本的读写功能。
过滤流:在节点流的基础上,增加新的功能。
二、字节流
1. 父类:
字节流的父类(抽象类):
(1) InputStream:字节输入流
对应的操作为读操作
功能方法:read方法
(2) OutputStream:字节输出流
对应的操作为写操作
功能方法:write方法
2. 字节节点流
(1) FileOutputStream:字节节点输出流 、文件字节输出流
构造方法:
FileOutputStream fos = new FileOutputStream("D:\\test56/a.txt");
参数:代表操作文件的路径,如果指定的文件夹不存在,则运行报错,错误信息为: java.io.FileNotFoundException: D:\test5\a.txt (系统找不到指定的路径。);
如果指定的 文件不存在,系统自动创建
绝对路径:盘符:\\文件夹\\ 文件
相对路径:文件夹/文件,默认在当前的项目中查找对应的文件夹内容
功能方法:
write(int n):将单个字节写入文件中
close():关闭流
(2) FileInputStream:文件字节输入流
构造方法:
FileInputStream fis = new FileInputStream("file/c.txt");
参数说明:参数代表操作路径,如果指定的文件不存在,则运行报错,错误信息为: java.io.FileNotFoundException: file\c.txt (系统找不到指定的文件。)
功能方法:
int read():一次性读取一个字节内容,将读取的内容作为返回值返回,达到文件尾部时回-1
close():关闭流,释放资源
3.字节流
(1) 过滤流:BufferedOutputStream/BufferedInputStream
缓冲流,提高IO效率,减少访问磁盘的次数;
数据存储在缓冲区中,flush是将缓存区的内容写入文件中,也可以直接close。
public class TestFileCopyBuffered {
public static void main(String[] args) throws IOException {
// 1. 创建文件字节输入流+输出流对象
// (1) 创建文件节点流对象
FileInputStream fis = new FileInputStream("D:\\test\\ph.mp4");
// (2) 创建过滤流
BufferedInputStream bis = new BufferedInputStream(fis);
// 写文件
FileOutputStream fos = new FileOutputStream("file/ph_copy.mp4");
BufferedOutputStream bos = new BufferedOutputStream(fos);
// 2. 边读边写
while(true){
int n=bis.read();
if(n==-1) break;
bos.write(n);
}
// 3. 关闭流。释放资源
bis.close();
bos.close();
}
}
(1) 过滤流:ObjectOutputStream/ObjectInputStream
增强了缓冲区功能
增强了读写8种基本数据类型和字符串功能
增强了读写对象的功能:
readObject() 从流中读取一个对象
writeObject():写入对象
对象在流上进行传输的过程称为对象序列化。
对象序列化的要求:[重点]
参与对象序列化的对象对应的类,必须实现java.io.Serializable接口
transient修饰的属性,不参与对象序列化
对象序列化达到文件尾部的标识:
如果运行时抛出 java.io.EOFException,代表读取的文件达到尾部
对象序列化的细节:
如果对象的属性,是自定义类型的对象时,则该对象也必须是可序列化的
如果对集合进行对象序列化,必须保证该集合中的所有元素是可序列化的
例:
import java.io.*;public class TestObjectOutputStream {public static void main(String[] args) throws IOException, ClassNotFoundException
{// 将对象写入文件中Student s = new Student("红包",23,100.0);// 1. 创建文件字节输出流对象 -》基础流FileOutputStream fos = new FileOutputStream("file/stu.txt");// 2. 包装过滤流ObjectOutputStream oos = new ObjectOutputStream(fos);// 3. 写对象oos.writeObject(s);// 4. 关闭流,释放资源oos.close();// 读对象FileInputStream fis = new FileInputStream("file/stu.txt");ObjectInputStream ois = new ObjectInputStream(fis);Object o=ois.readObject();System.out.println(o);ois.close();}}
import java.io.Serializable;class Address implements Serializable{}public class Student implements Serializable {private String name;private transient Integer age;private Double score;private Address a = new Address();public Student() {}public Student(String name, Integer age, Double score) {this.name = name;this.age = age;this.score = score;}public String getName() {return name;
}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Double getScore() {return score;}public void setScore(Double score) {this.score = score;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", score=" + score +'}';}}
三、字符流
1. 字符流的父类(抽象类):
Reader:字符输入流
对应的操作为读操作
功能方法:read方法
Writer:字符输出流
对应的操作为写操作
功能方法:write方法
2. 文件字符流
(1) FileWriter文件字符输出流,继承Writer中的方法:
public void write(int n):将单个字符写入到文件中
(2) FileReader文件字符输入流,继承Reader中的方法:
public int read():一次读取一个字符的内容
3. 字符过滤流
(1) BufferedReader:
功能方法,readLine():一次性读取一行内容,返回内容为String,读取达到尾部,返回-1
(2) PrintWriter
println(参数);
4. 桥转换流
InputStreamReader/OutputStreamWriter:桥转换流;设置 编解码格式
import java.io.*;// 桥转换流: ctr+A -> ctr+x -> 设置格式 -> ctr+v ->ctr+spublic class TestInputStreamReader {public static void main(String[] args) throws IOException {// 1. 创建文件字节输入流对象
FileInputStream fis = new FileInputStream("file/k.txt");// 2. 创建桥转换流对象,设置编解码格式
InputStreamReader isr = new InputStreamReader(fis,"GBK");// 3. 创建过滤流
BufferedReader br = new BufferedReader(isr);// 4. 读操作
while(true){String n= br.readLine();if(n==null) break;System.out.println(n);}// 5. 关闭流
br.close();}}
import java.io.*;// 桥转换流: ctr+A -> ctr+x -> 设置格式 -> ctr+v ->ctr+spublic class TestOutputStreamWriter {public static void main(String[] args) {PrintWriter pw = null;try {FileOutputStream fos = new FileOutputStream("file/my.txt");OutputStreamWriter osw = new OutputStreamWriter(fos, "GBK");pw = new PrintWriter(osw);pw.println("嘻嘻");pw.println("哈哈");pw.print("呵呵");}catch (IOException e){e.printStackTrace();}finally {if(pw !=null) {pw.close();}}}}
四、 File类
1.IO和File
IO流:对文件中的内容进行操作。
File类:对文件自身进行操作例如:删除文件,文件重新命名等
2.操作:
public class TestFile {
public static void main(String[] args) throws IOException {
File file = new File("file/hh.txt");
/*System.out.println(file.exists());
file.createNewFile();*/
if(file.exists()){
System.out.println("文件存在,则直接使用...");
FileInputStream fis = new FileInputStream(file);
}else{
System.out.println("文件不存在,创建新的文件....");
file.createNewFile();
}
}
}
相关文章:
java学习-第十五章-IO流(java.io包中)
一、理解 1. 简单而言:流就是内存与存储设备之间传输数据的通道、管道。 2. 分类: (1) 按方向(以JVM虚拟机为参照物)【重点】 输入流:将中的内容读入到中。 输出流:将中的内容写入到中。 (2) 按单位: 字节流…...
企业如何实现数据从源端到消费端的全链路加工逻辑可视化?
要想实现数据加工链路的可视化,血缘图谱无疑是一个有效的工具。血缘图谱能够清晰地展示数据从产生、流转、加工到最终消费的每一个环节,帮助企业直观地理解数据之间的关联和依赖关系,轻松追溯数据来源和去向,并在数据出现问题时快…...
Toxicity of the Commons: Curating Open-Source Pre-Training Data
基本信息 📝 原文链接: https://arxiv.org/abs/2410.22587👥 作者: Catherine Arnett, Eliot Jones, Ivan P. Yamshchikov, Pierre-Carl Langlais🏷️ 关键词: toxicity filtering, language models, data curation📚 分类: 机器…...
Python 单例模式工厂模式和classmethod装饰器
前言: Python作为面向对象的语言,显然支持基本的设计模式。也具备面向对象的语言的基本封装方法:属性、方法、继承、多态等。但是,做为强大的和逐渐发展的语言,python也有很多高级的变种方法,以适应更多的…...
计算机键盘简史 | 键盘按键功能和指法
注:本篇为 “计算机键盘简史 | 键盘按键功能和指法” 相关文章合辑。 英文部分机翻未校。 The Evolution of Keyboards: From Typewriters to Tech Marvels 键盘的演变:从打字机到技术奇迹 Introduction 介绍 The keyboard has journeyed from a humb…...
【数字信号处理】期末综合实验,离散时间信号与系统的时域分析,离散信号 Z 变换,IIR 滤波器的设计与信号滤波,用窗函数法设计 FIR 数字滤波器
关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…...
面试技术点之安卓篇
一、基础 二、高级 三、组件 Android中SurfaceView和TextureView有什么区别? 参考 Android中SurfaceView和TextureView有什么区别? 四、三方框架 五、系统源码 六、性能优化...
Windows Terminal ssh到linux
1. windows store安装 Windows Terminal 2. 打开json文件配置 {"$help": "https://aka.ms/terminal-documentation","$schema": "https://aka.ms/terminal-profiles-schema","actions": [{"command": {"ac…...
自适应卡尔曼滤波(包括EKF、UKF、CKF等)的创新思路——该调什么、不该调什么
在调节自适应卡尔曼滤波时,需要注意的参数和矩阵都对滤波器的性能有直接影响。本文给出详细的说明,包括相关公式和 MATLAB 代码示例 文章目录 需要调节的参数1. **过程噪声协方差矩阵 Q Q Q**:2. **测量噪声协方差矩阵 R R R**:…...
SpringBoot项目监听端口接受数据(NIO版)
文章目录 前言服务端相关配置核心代码 客户端 前言 环境: JDK:64位 Jdk1.8 SpringBoot:2.1.7.RELEASE 功能: 使用Java中原生的NIO监听端口接受客户端的数据,并发送数据给客户端。 服务端 相关配置 application.ym…...
QT实战--带行号的支持高亮的编辑器实现(2)
本文主要介绍了第二种实现带行号的支持高亮的编辑器的方式,基于QTextEdit实现的,支持自定义边框,背景,颜色,以及滚动条样式,支持输入变色,复制文本到里面变色,支持替换,是一个纯专业项目使用的编辑器 先上效果图: 1.头文件ContentTextEdit.h #ifndef CONTENT_TEXT_…...
(翻译)网络安全书籍推荐列表
注:对于所有的书籍链接,我都会寻找中文版重新链接,如无中文版,则按原文链接英文版。并且所有书籍名称保留英文名称 这是一个我建立的一个有关计算机安全的书籍列表,它们都是很有用的“计算机安全”这个主题的相关数据。…...
TcpServer 服务器优化之后,加了多线程,对心跳包进行优化
TcpServer 服务器优化之后,加了多线程,对心跳包进行优化 TcpServer.h #ifndef TCPSERVER_H #define TCPSERVER_H#include <iostream> #include <winsock2.h> #include <ws2tcpip.h> #include <vector> #include <map> #…...
黑马程序员Java项目实战《苍穹外卖》Day12
苍穹外卖-day12 课程内容 工作台Apache POI导出运营数据Excel报表 功能实现:工作台、数据导出 工作台效果图: 数据导出效果图: 在数据统计页面点击数据导出:生成Excel报表 1. 工作台 1.1 需求分析和设计 1.1.1 产品原…...
经纬度解析到省市区【开源】
现在业务中有需要解析经纬度到省市区。 按理说可以直接使用高德,百度之类的。 但是老板太抠。于是去找开源项目。找了一圈,数据都太老了,而且有时候编码还不匹配。 所以诞生了这个项目,提供完整的一套省市区编码和定位反解析。…...
bug:uniapp运行到微信开发者工具 白屏 页面空白
1、没有报错信息 2、预览和真机调试都能正常显示,说明代码没错 3、微信开发者工具版本已经是win7能装的最高版本了,1.05版 链接 不打算回滚旧版本 4、解决:最后改调试基础库为2.25.4解决了,使用更高版本的都会报错,所…...
旧版本 MySQL 处理字符表情写入问题
报错信息 新增数据 java.sql.SQLException: Incorrect string value: \xF0\x9F\x91\x8D\xE5\x8F... for column解决方案 老项目,而且是旧版本,且表情不影响业务,直接简单粗暴的过滤掉即可,有还原的需求也可以 toUnicode 转为字…...
vue使用v-if和:class完成条件渲染
1.使用v-if 和v-else 完成主body和暂无数据两个<tbody>标签的条件渲染(注意与v-show效果的区别) 2.v-for完成列表渲染 3.:class完成分数标红的条件控制 删哪个就传哪个的id,基于这个id去过滤掉相同id的项,把剩下的项返回 <td><a click.p…...
Docker:WARNING: Published ports are discarded when using host network mode 解决方法
在Docker中,使用主机网络模式(host network mode)时,容器将共享主机的网络命名空间,这意味着容器将直接使用主机的网络接口和端口。因此,当你尝试通过Docker的发布端口功能(publish a port&…...
音视频入门基础:MPEG2-TS专题(12)—— FFmpeg源码中,把各个transport packet组合成一个Section的实现
一、引言 从《音视频入门基础:MPEG2-TS专题(9)——FFmpeg源码中,解码TS Header的实现》可以知道:FFmpeg源码中使用handle_packet函数来处理一个transport packet(TS包),该函数的前半…...
【数据结构】二叉树的性质和存储结构
性质 在二叉树的第i层上至多有2^{i-1}个结点,至少有1个结点 深度为k的二叉树至多有2^{k-1}个结点(k≥1),至少有k个结点 对任何一棵二叉树T,如果其叶子数为n0,度为2的结点数为n2,则n0n21 具有n个结点的完…...
gbase8s之查看锁表的sql
#只能看当前锁表的sql,看不到历史的。 #使用方法:sh 脚本文件名 库名 表名 database$1 table$2 hexoncheck -pt $database:$table|grep -i partnum|awk {printf ("%x|",$3)} #echo $hex #echo ${hex%?} #ownonstat -k |grep -iE ${he…...
URI 未注册(设置 语言和框架 架构和 DTD)
一、问题描述:在springboot项目中的resources中新建mybatis-config.xml文件时,从mybatis文档中复制的代码报错:URI 未注册(设置 | 语言和框架 | 架构和 DTD) 二、解决:在Springboot项目的设置->架构和DTD中添加 红色的网址&…...
Ubuntu上使用system()函数运行不需要输入密码
使用system()运行一些终端命令的时候,需要sudo权限,也就是必须输入密码,那么在程序自启动的时候就无法成功启动。如果设置Ubuntu下所有操作都不需要密码,安全性太低,所以我们可以将需要用到的终端指令给予无需输入密码…...
【MySQL】数据库必备知识:全面整合表的约束与深度解析
前言:本节内容讲述表的约束的相关内容。 表的约束博主将会通过两篇文章进行讲解, 这是第一篇上半部分。 讲到了约束概念。 以及几种常见约束。下面友友们开始学习吧! ps:友友们使用了mysql就可以放心观看喽! 目录 表的约束概念 …...
Windows下Docker快速安装使用教程
在当今软件开发和部署的世界中,Docker 已经成为一个不可或缺的工具。这里不对Docker进行详细阐述,需要系统学习Docker的伙伴可寻求更专业详细的教程或书籍学习。本文主要讲解Windows系统下Docker安装及使用。 一、环境准备 1.1检查电脑是否开启虚拟化 …...
PTA DS 6-2 另类堆栈 (C补全函数)
6-2 另类堆栈 分数 15 全屏浏览 切换布局 作者 DS课程组 单位 浙江大学 在栈的顺序存储实现中,另有一种方法是将Top定义为栈顶的上一个位置。请编写程序实现这种定义下堆栈的入栈、出栈操作。如何判断堆栈为空或者满? 函数接口定义: …...
rk3568之mpp开发笔记mpp移植到开发板
前言: 大家好,今天给大家介绍的内容是rk平台的mpp编解码这块的内容,在rk目前看到有三套框架涉及到编解码内容: 1、rkmedia 2、rockit 3、mpp 这三种不同形式的编解码方式,后面再做详细的框架对比,今天我…...
Vue解决跨域问题
要解决 Vue 项目的跨域问题并通过 vue.config.js 配置代理,可以按照以下步骤修改 vue.config.js 文件。你提供的代码大部分已经正确,只需要做一些格式上的调整。以下是正确的 vue.config.js 配置: // vue.config.jsmodule.exports {devServ…...
Kubernetes Nginx-Ingress | 禁用HSTS/禁止重定向到https
目录 前言禁用HSTS禁止重定向到https关闭 HSTS 和设置 ssl-redirect 为 false 的区别 前言 客户请求经过ingress到服务后,默认加上了strict-transport-security,导致客户服务跨域请求失败,具体Response Headers信息如下; 分析 n…...
wordpress简洁风模板/seo优化信
叶子节点个数为n1,度为2的节点数为n2,用n2表示n1。 证:因为节点分为度为1,2,3,的所以设x节点总数。 xn1n2y(度为1) 边数1 2*n2y1 n1n2y2*n2y1 n2n1-1 转载于:https://www.cnblogs.com/wls001/p/4962439.html...
网站整体风格设计/一个关键词要刷多久
工作之余抽点时间出来写写博文,希望对新接触的朋友有帮助。今天在这里和大家一同学习一下引用指针 函数是C/C程序的基本功能单元,其重要性不言而喻。函数设计的纤细缺点很容易致使该函数被错用,所以光使函数的功能正确是不敷的。本章重点论述…...
校园二手网站开发与设计任务书/搜索引擎关键词怎么优化
限制访问网站、过滤特定网址、禁止访问指定网站的方法 此博文包含图片 (2017-12-19 16:36:25)转载▼ 许多公司出于管理员工上网行为的需要,经常限制电脑访问一些网站例如游戏网站、购物网站或是视频网站等等。网上介绍了一些方法,通过windows操作系统可以…...
建站网站怎么上传代码/百度导航最新版本下载安装
【Web API】Talend API Testerを使ってみた...
能自己做效果图的网站/百度seo优化排名如何
题目传送门 题目大意: 同这题,但是对于 111 ~ mmm 内的每个 nnn 都要求解,且 m≤5105m\leq 5\times 10^5m≤5105。 题解 先不考虑顺序,最后乘 n!n!n! 即可。 每个元素之多选一个,要选出 nnn 个来,且贡献…...
做中国旅游网站的目的与必要性/网络营销广告策划
我们在做Android项目开发过程中,经常会遇到这种情况,我们需要引入的aar、jar等所依赖的第三方依赖库与我们本地的依赖库的版本号不一致,造成我们项目编译失败,遇到这种情况时,我们只需要在module下的build.gradle文件中…...