08章【文件与IO】

文章目录

  • File类
  • IO流
    • 字节流
    • 字符流
    • 字节字符转换流
    • 缓冲流
    • 打印流
    • 对象流
    • 字节数组流
    • 数据流
    • 字符串流、管道流、合并流
  • RandomAccessFile
  • Properties文件操作
  • 文件压缩与解压缩
  • 装饰者模式
  • 常见字符编码
  • New IO

File类

File类的基本概念
File类:表示文件和目录路径名的抽象表示形式。
File类可以实现文件的创建、删除、重命名、得到路径、创建时间等等,是唯一与文件本身有关的操作类。

File类的操作方法
在这里插入图片描述

在这里插入图片描述


IO流

IO流概述

  • IO流:输入输出流(Input/Output)
  • 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流
  • 流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

IO流的分类

  • 根据处理数据类型的不同分为:字符流和字节流
  • 根据数据流向不同分为:输入流和输出流

字节流

字节输出流

OutputStream类定义

public abstract class OutputStream extends Object implements Closeable, Flushable
  • 此抽象类是表示输出字节流的所有类的超类。
  • 输出流接受输出字节并将这些字节发送到InputStream 类某个接收器要向文件中输出,使用FileOutputStream类

字节输入流

InputSteam类定义

public abstract class InputStream extends Object implements Closeable
  • 此抽象类是表示字节输入流的所有类的超类。
  • FileInputStream 从文件系统中的某个文件中获得输入字节。

字符流

Writer

  • 写入字符流的抽象类。子类必须实现的方法仅有 write(char[], int, int)、flush() 和 close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。
  • 与OutputStream一样,对文件的操作使用:FileWriter类完成。

Reader

  • 用于读取字符流的抽象类。子类必须实现的方法只有 read(char[], int, int) 和 close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。
  • 使用FileReader类进行实例化操作。

字节流与字符流的区别

  • 在所有的流操作里。字节永远是最基础的。任何基于字节的操作都是正确的。无论你是文本文件还是二进制的文件。
  • 如果确认流里面只有可打印的字符,包括英文的和各种国家的文字,也包括中文,那么可以考虑用字符流。
  • 由于编码不同,多字节的字符可能占用多个字节。比如GBK的汉字就占用2个字节,而UTF-8的汉字就占用3个字节。 所以,字符流是根据指定的编码,将1个或多个字节转化为java里面的unicode的字符,然后进行操作。
  • 字符操作一般使用Writer,Reader等, 字节操作一般都是InputStream, OutputStream 以及各种包装类,比如BufferedInputStream和BufferedOutputStream等。

总结:如果你确认你要处理的流是可打印的字符,那么使用字符流会看上去简单一点。如果不确认,那么用字节流总是不会错的。

指定一个盘符下的文件,把该文件复制到指定的目录下

字节字符转换流

  • 转换流,可以将一个字节流转换为字符流,也可以将一个字符流转换为字节流。
  • OutputStreamWriter:可以将输出的字符流转换为字节流的输出形式
  • InputStreamReader:将输入的字节流转换为字符流输入形式

缓冲流

首先要明确一个概念:
对文件或其它目标频繁的读写操作,效率低,性能差。
使用缓冲流的好处是,能够更高效的读写信息,原理是将数据先缓冲起来,然后一起写入或者读取出来。
BufferedInputStream: 为另一个输入流添加一些功能,在创建 BufferedInputStream 时,会创建一个内部缓冲
区数组,用于缓冲数据。
BufferedOutputStream:通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次
字节写入调用底层系统。
BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

打印流

对文件或其它目标频繁的读写操作,效率低,性能差。
使用缓冲流的好处是,能够更高效的读写信息,原理是将数据先缓冲起来,然后一起写入或者读取出来。

  • BufferedInputStream: 为另一个输入流添加一些功能,在创建 BufferedInputStream 时,会创建一个内部缓冲区数组,用于缓冲数据。
  • BufferedOutputStream:通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统。
  • BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
  • BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

对象流

对象流的两个类:

  • ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream
  • ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化。

序列化一组对象:
在序列化操作中,同时序列化多个对象时,反序列化也必须按顺序操作,如果想要序列化一组
对象该如何操作呢?

  • 序列化一组对象可采用:对象数组的形式,因为对象数组可以向Object进行转型操作。
  • transient关键字:如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。

字节数组流

数据流

字符串流、管道流、合并流

RandomAccessFile

Properties文件操作

文件压缩与解压缩

装饰者模式

常见字符编码

New IO

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

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

相关文章

【AIGC】CLIP

CLIP的基本原理 对比学习: Clip使用对比学习来训练模型。对比学习的目标是通过将正样本(相似的图像和文本对)与负样本(不相似的图像和文本对)进行比较,从而使模型学会区分不同样本之间的差异。这有助于模型…

仰暮计划|“每个人三发子弹,我打中两靶子,还有一发子弹让我打到红薯地里了”

“百善孝为先”,爱老、敬老一直是我们的优秀传统文化,一直是流淌在我们体内的文化基因。中国历朝历代有着丰富的养老文化,还有一系列的爱老敬老政策。无论是从周代创建的养老礼制度,还是春秋时期开始的古代养老文化,亦…

C#使用IsLeapYear方法判断指定年份是否为闰年

目录 一、判断指定年是否为闰年的2个方法 1.使用IsLeapYear方法判断指定年份是否为闰年 2.使用自定义的算法计算指定年份是否为闰年 二、示例 1.方法1的实例 2.方法2的实例 一、判断指定年是否为闰年的2个方法 1.使用IsLeapYear方法判断指定年份是否为闰年 使用IsLeapY…

C语言进阶——数据结构之链表(续)

前言 hello,大家好呀,我是Humble,本篇博客承接之前的C语言进阶——数据结构之链表 的内容(没看过的小伙伴可以从我创建的专栏C语言进阶之数据结构 找到那篇文章并阅读后在回来哦~),上次我们重点说了链表中…

2023年智能可穿戴行业市场分析(电商数据查询分析):智能手表销额增长21%,手环明显下滑

近年来,随着技术的进步,智能可穿戴设备在社交网络、医疗保健、导航等诸多领域有着非常广泛的应用,这为大众生活带来了诸多便利。 当前的可穿戴产品形态纷繁多样,主要包括智能手表、智能眼镜、智能手环、健康穿戴和体感控制等等&am…

Java框架篇面试题

📕作者简介: 过去日记,致力于Java、GoLang,Rust等多种编程语言,热爱技术,喜欢游戏的博主。 📗本文收录于java面试题系列,大家有兴趣的可以看一看 📘相关专栏Rust初阶教程、go语言基…

【江科大】STM32:I2C通信外设(硬件)

在将2C通信外设之前,我们先捋一捋,串口的相关特点来和2C进行一个对北比。 首先: 1,大部分单片机,设计的PCB板均带有串口通信的引脚(也就是通信基本都借助硬件收发器来实现) 2.对于串口的异步时序&#xff0…

什么样的宣传才能对消费者起效?

品牌离不开宣传,宣传又直接面向消费者,然后面对铺天盖地的宣传,除了从业人员,相信大部分用户都会有抵触心理,今天媒介盒子就来和大家聊聊,什么样的宣传能够提高消费者的接受度,让宣传不白宣传。…

elementui 表单 resetFields 方法不生效问题解决

问题 调用 elementui 官方提供的表单重置方法 resetFields 方法重置表单不生效,相信很多小伙伴都遇到过这个问题。 解决方法 检查代码看每个表单项的 prop 与 v-model 绑定的属性值命名是否相同,不相同的话就会导致 resetFields 方法不生效的问题&am…

AI技术的崛起:软件工程师的新篇章

随着人工智能(AI)技术的迅猛发展与普及,各行各业都受到了前所未有的冲击与变革。 对于软件工程师而言,AI技术的崛起既带来了挑战,也带来了前所未有的机遇。本文将探讨AI技术对软件工程师的影响,以及如何应…

vue2面试题:什么是双向数据绑定

vue2面试题:什么是双向数据绑定 回答思路:1.什么是双向绑定-->2.双向数据绑定的原理-->3.如何实现双向数据绑定1.什么是双向绑定2.双向数据绑定的原理3.如何实现双向数据绑定来一个构造函数:执行初始化,对data执行响应化处理…

Linux: make/Makefile 相关的知识

背景: 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的 规则来指定,哪些文件需要先编译&#xff0c…

ubuntu22.04安装filebeat报错解决

1、查看报错 journalctl -u filebeat 或者 filebeat -c /etc/filebeat/filebeat.yml找到报错信息 runtime/cgo: pthread_create failed: Operation not permitted 2、解决报错 在filebeat.yml配置文件添加如下配置,重启filebeat seccomp:default_action: allow…

ansible 常用模块

目录 1.ping模块 2.command模块 3. shell模块 4.copy模块 5.file模块 6.fetch模块 7.cron模块 8.yum模块 9.service模块 10.user模块 11.group模块 12.script 模块 13.setup模块 14. get_url模块 15.stat模块 16.unarchive模块 1.ping模块 使用ansible db1 -m pin…

【数学建模】综合评价方法

文章目录 综合评价的基本理论和数据预处理综合评价的基本概念综合评价体系的构建综合指标的预处理方法评价指标预处理示例 常用的综合评价数学模型线性加权综合评价模型TOPSIS法灰色关联度分析熵值法秩和比(RSR)法综合评价示例 综合评价的基本理论和数据…

NODE笔记 2 使用node操作飞书多维表格

前面简单介绍了node与简单的应用,本文通过结合飞书官方文档 使用node对飞书多维表格进行简单的操作(获取token 查询多维表格recordid,删除多行数据,新增数据) 文章目录 前言 前两篇文章对node做了简单的介绍&#xff…

Android-System fastboot 介绍和使用

一、fastboot简介 在android手机中,fastboot是一种比recovery更底层的刷机模式。 实际操作中:fastboot是一种线刷,就是使用USB连接手机的一种刷机模式。相对于某些系统来说,线刷比卡刷更可靠,安全。recovery是一种卡刷…

node 第二十三天 mongoDB shell 命令 CRUD 增删改查 基础

什么是 mongoDB shell 命令 mongoDB shell 命令就是在cmd窗口或者powershell窗口与mongoDB交互的命令, 以下简称mongosh 对应我们上一天安装的 mongosh 工具 有什么用 mongosh 对一般的开发者可能意义不大, 因为在开发过程中我们会基于某一款语言来使用mongoDB, 比如在node端我…

【Java程序员面试专栏 专业技能篇】计算机网络核心面试指引

关于计算机网络部分的核心知识进行一网打尽,包括计算机的网络模型,各个层的一些重点概念,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 分层基本概念 计算机网络模型的分层及具体作用 计算机网络有哪些分层模型 可以按照应用层到物…

单调栈经典例题

import java.util.Scanner;public class Main{public static void main(String[] args) {//单调递增栈,栈中的所有元素严格单调递增//比如1 6 5 4 9 8 7 10 11 56不会出现在答案里//因为被4给拦截住了//遍历到4的时候可以把56都出栈//89也不会出现,被7拦住了//遍历到…