07 文件-IO流字节流

File

File类的使用

File对象既可以代表文件、也可以代表文件夹。它封装的对象仅仅是一个路径名,这个路径可以存在,也可以不存在

创建File类的对象

构造器说明
public File(String pathname)根据文件路径创建文件对象
public File(String parent, String child)根据父路径和子路径名字创建文件对象
public File(File parent, String child)根据父路径对应文件对象和子路径名字创建文件对象

1、File类的作用?

  • 创建对象定位文件,可以删除、获取文件信息等。但是不能读写文件内容。

2、File类构建对象的方式 ?

  • File file = new File(“文件/文件夹/绝对路径/相对路径”);

3、绝对路径和相对路径写法

  • 绝对路径是带盘符的。File file = new File(“D:\\itheima\\a.txt”);
  • 相对路径是不带盘符的,默认到当前工程下寻找文件。File file = new File(“模块名\\a.txt”);

File类的判断文件类型、获取文件信息功能

方法名称说明
public boolean isDirectory()判断此路径名表示的File是否为文件夹
public boolean isFile()判断此路径名表示的File是否为文件
public boolean exists()判断此路径名表示的File是否存在
public long length()返回文件的大小(字节数量)
public String getAbsolutePath()返回文件的绝对路径
public String getPath()返回定义文件时使用的路径
public String getName()返回文件的名称,带后缀
public long lastModified()返回文件的最后修改时间(时间毫秒值)

创建文件、删除文件

方法名称说明
创建文件的功能
public boolean mkdir()只能创建一级文件夹
public boolean mkdirs()可以创建多级文件夹
public boolean createNewFile()创建一个新的空的文件
删除文件的功能delete方法默认只能删除文件和空文件夹,删除后的文件不会进入回收站
public boolean delete()删除文件、空文件夹

遍历文件夹

方法名称说明
public String[] list()获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回。
public File[] listFiles()获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点)

使用listFiles方法时的注意事项

  • 当主调是文件,或者路径不存在时,返回null
  • 当主调是空文件夹时,返回一个长度为0的数组
  • 当主调是一个非空文件夹,但是没有权限访问该文件夹时,返回null

字符集

字符集简介

标准ASCII字符集
  • ASCII(American Standard Code for Information Interchange):美国信息交换标准代码,包括了英文、符号等。
  • 标准ASCII使用1个字节存储一个字符,首尾是0,总共可表示128个字符,对美国佬来说完全够用。
    image-20240412200633390
常见字符集底层字符的编码是什么样的?
  • GBK(汉字内码扩展规范,国标)

    • 汉字编码字符集,包含了2万多个汉字等字符,GBK中一个中文字符编码成两个字节的形式存储。
    • 注意:GBK兼容了ASCII字符集。1xxxxxxx xxxxxxxx 0xxxxxxx 1xxxxxxx xxxxxxxx
    • GBK规定: 汉字的第一个字节的第一位必须是 1
    • GBK字符中一个中文字符占2个字节
  • Unicode字符集(统一码,也叫万国码)

    • Unicode是国际组织制定的,可以容纳世界上所有文字、符号的字符集。
    • 英文和数字等在任何国家的字符集中都占1个字节
  • UTF-32 : 4个字节表示一个字符

  • UTF-8

    • 是Unicode字符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,4个字节
    • 英文字符、数字等只占1个字节(兼容标准ASCII编码),汉字字符占用3个字节。
    • UTF-8编码方式(二进制)
      0xxxxxxx (ASCII码)
      110xxxxx 10xxxxxx
      1110xxxx 10xxxxxx 10xxxxxx
      11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
总结
  • 常见字符集有哪些?各自存储数据的特点是什么?
    • ASCII字符集:只有英文、数字、符号等,占1个字节。
    • GBK字符集:汉字占2个字节,英文、数字占1个字节。
    • UTF-8字符集:汉字占3个字节,英文、数字占1个字节。

字符集的编码、解码操作

编码: 把字符按照指定字符集缩码成字节

解码: 把字节按照指定字符集解码成字符

String方法说明
对字符的编码
byte[] getBytes()使用平台的默认字符集将该String编码为一系列字节,将结果存储到新的字节数组中
byte[] getBytes(String charsetName)使用指定的字符集将该String编码为一系列字节,将结果存储到新的字节数组中
对字符的解码
String(byte[] bytes)通过使用平台的默认字符集解码指定的字节数组来构造新的String
String(byte[] bytes, String charsetName)通过指定的字符集解码指定的字节数组来构造新的String
注意:字符编码时使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码

IO流

IO流:概述

image-20240412203455876

IO流分类

image-20240412203604727
字节输入流以内存为基准,来自磁盘文件/网络中的数据以字节的形式读入到内存中去的流
字节输出流以内存为基准,把内存中的数据以字节写出到磁盘文件或者网络中去的流。
字符输入流以内存为基准,来自磁盘文件/网络中的数据以字符的形式读入到内存中去的流。
字符输出流以内存为基准,把内存中的数据以字符写出到磁盘文件或者网络介质中去的流。

IO流:字节流

IO流体系

image-20240412204256410

FileInputStream(文件字节输入流)

作用:以内存为基准,可以把磁盘文件中的数据以字节的形式读入到内存中来。

构造器说明
public FileInputStream(File file)创建字节输入流管道与源文件接通
public FileInputStream(String pathname)创建字节输入流管道与源文件接通
方法名称说明
public int read()每次读取一个字节返回,如果发现没有数据可读会返回-1.
public int read(byte[] buffer)每次用一个字节数组去读取数据,返回字节数组读取了多少个字节,如果发现没有数据可读会返回-1.

注意: 使用FileInputStream每次读取一个字节,读取性能差,并且读取汉字输出会乱码

FileInputStream(文件字节输入流)

作用:以内存为基准,把文件中的数据以字节的形式读入到内存中来。

方法名称说明
public int read()每次读取一个字节返回,如果发现没有数据可读会返回-1.
public int read(byte[] buffer)每次用一个字节数组去读取数据,返回字节数组读取了多少个字节, 如果发现没有数据可读会返回-1.

注意: 使用FileInputStream每次读取多个字节,读取性能得到了提升,但读取汉字输出还是会乱码。

文件字节输入流:一次读取完全部字节

方式一:自己定义一个字节数组与被读取的文件大小一样大,然后使用该字节数组,一次读完文件的全部字节。

方式二:Java官方为InputStream提供了如下方法,可以直接把文件的全部字节读取到一个字节数组中返回。

方法名称说明
public int read(byte[] buffer)每次用一个字节数组去读取,返回字节数组读取了多少个字节,如果发现没有数据可读会返回-1.
public byte[] readAllBytes()直接将当前字节输入流对应的文件对象的字节数据装到一个字节数组返回
提问
  • 直接把文件数据全部读取到一个字节数组可以避免乱码,是否存在问题?
    • 如果文件过大,创建的字节数组也会过大,可能引起内存溢出。
  • 读写文本内容更适合用 字符流
  • 字节流 适合做数据的转移, 如: 文件复制等

FileOutputStream(文件字节输出流)

作用:以内存为基准,把内存中的数据以字节的形式写出到文件中去。

构造器说明
public FileOutputStream(File file)创建字节输出流管道与源文件对象接通
public FileOutputStream(String filepath)创建字节输出流管道与源文件路径接通
public FileOutputStream(File file,boolean append)创建字节输出流管道与源文件对象接通,可追加数据
public FileOutputStream(String filepath,boolean append)创建字节输出流管道与源文件路径接通,可追加数据
方法名称说明
public void write(int a)写一个字节出去
public void write(byte[] buffer)写一个字节数组出去
public void write(byte[] buffer , int pos , int len)写一个字节数组的一部分出去。
public void close() throws IOException关闭流。
  • 字节输出流如何实现写出去的数据可以换行?
    • 写"\r\n"的字节数组表示形式

# 文件-IO&字节流

File

File类的使用

File对象既可以代表文件、也可以代表文件夹。它封装的对象仅仅是一个路径名,这个路径可以存在,也可以不存在

创建File类的对象

构造器说明
public File(String pathname)根据文件路径创建文件对象
public File(String parent, String child)根据父路径和子路径名字创建文件对象
public File(File parent, String child)根据父路径对应文件对象和子路径名字创建文件对象

1、File类的作用?

  • 创建对象定位文件,可以删除、获取文件信息等。但是不能读写文件内容。

2、File类构建对象的方式 ?

  • File file = new File(“文件/文件夹/绝对路径/相对路径”);

3、绝对路径和相对路径写法

  • 绝对路径是带盘符的。File file = new File(“D:\\itheima\\a.txt”);
  • 相对路径是不带盘符的,默认到当前工程下寻找文件。File file = new File(“模块名\\a.txt”);

File类的判断文件类型、获取文件信息功能

方法名称说明
public boolean isDirectory()判断此路径名表示的File是否为文件夹
public boolean isFile()判断此路径名表示的File是否为文件
public boolean exists()判断此路径名表示的File是否存在
public long length()返回文件的大小(字节数量)
public String getAbsolutePath()返回文件的绝对路径
public String getPath()返回定义文件时使用的路径
public String getName()返回文件的名称,带后缀
public long lastModified()返回文件的最后修改时间(时间毫秒值)

创建文件、删除文件

方法名称说明
创建文件的功能
public boolean mkdir()只能创建一级文件夹
public boolean mkdirs()可以创建多级文件夹
public boolean createNewFile()创建一个新的空的文件
删除文件的功能delete方法默认只能删除文件和空文件夹,删除后的文件不会进入回收站
public boolean delete()删除文件、空文件夹

遍历文件夹

方法名称说明
public String[] list()获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回。
public File[] listFiles()获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点)

使用listFiles方法时的注意事项

  • 当主调是文件,或者路径不存在时,返回null
  • 当主调是空文件夹时,返回一个长度为0的数组
  • 当主调是一个非空文件夹,但是没有权限访问该文件夹时,返回null

字符集

字符集简介

标准ASCII字符集
  • ASCII(American Standard Code for Information Interchange):美国信息交换标准代码,包括了英文、符号等。
  • 标准ASCII使用1个字节存储一个字符,首尾是0,总共可表示128个字符,对美国佬来说完全够用。

image-20240412200633390

常见字符集底层字符的编码是什么样的?
  • GBK(汉字内码扩展规范,国标)

    • 汉字编码字符集,包含了2万多个汉字等字符,GBK中一个中文字符编码成两个字节的形式存储。
    • 注意:GBK兼容了ASCII字符集。1xxxxxxx xxxxxxxx 0xxxxxxx 1xxxxxxx xxxxxxxx
    • GBK规定: 汉字的第一个字节的第一位必须是 1
    • GBK字符中一个中文字符占2个字节
  • Unicode字符集(统一码,也叫万国码)

    • Unicode是国际组织制定的,可以容纳世界上所有文字、符号的字符集。
    • 英文和数字等在任何国家的字符集中都占1个字节
  • UTF-32 : 4个字节表示一个字符

  • UTF-8

    • 是Unicode字符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,4个字节
    • 英文字符、数字等只占1个字节(兼容标准ASCII编码),汉字字符占用3个字节。
    • UTF-8编码方式(二进制)
      0xxxxxxx (ASCII码)
      110xxxxx 10xxxxxx
      1110xxxx 10xxxxxx 10xxxxxx
      11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
总结
  • 常见字符集有哪些?各自存储数据的特点是什么?
    • ASCII字符集:只有英文、数字、符号等,占1个字节。
    • GBK字符集:汉字占2个字节,英文、数字占1个字节。
    • UTF-8字符集:汉字占3个字节,英文、数字占1个字节。

字符集的编码、解码操作

编码: 把字符按照指定字符集缩码成字节

解码: 把字节按照指定字符集解码成字符

String方法说明
对字符的编码
byte[] getBytes()使用平台的默认字符集将该String编码为一系列字节,将结果存储到新的字节数组中
byte[] getBytes(String charsetName)使用指定的字符集将该String编码为一系列字节,将结果存储到新的字节数组中
对字符的解码
String(byte[] bytes)通过使用平台的默认字符集解码指定的字节数组来构造新的String
String(byte[] bytes, String charsetName)通过指定的字符集解码指定的字节数组来构造新的String
注意:字符编码时使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码

IO流

IO流:概述

image-20240412203455876

IO流分类

image-20240412203604727
字节输入流以内存为基准,来自磁盘文件/网络中的数据以字节的形式读入到内存中去的流
字节输出流以内存为基准,把内存中的数据以字节写出到磁盘文件或者网络中去的流。
字符输入流以内存为基准,来自磁盘文件/网络中的数据以字符的形式读入到内存中去的流。
字符输出流以内存为基准,把内存中的数据以字符写出到磁盘文件或者网络介质中去的流。

IO流:字节流

IO流体系

image-20240412204256410

FileInputStream(文件字节输入流)

作用:以内存为基准,可以把磁盘文件中的数据以字节的形式读入到内存中来。

构造器说明
public FileInputStream(File file)创建字节输入流管道与源文件接通
public FileInputStream(String pathname)创建字节输入流管道与源文件接通
方法名称说明
public int read()每次读取一个字节返回,如果发现没有数据可读会返回-1.
public int read(byte[] buffer)每次用一个字节数组去读取数据,返回字节数组读取了多少个字节,如果发现没有数据可读会返回-1.

注意: 使用FileInputStream每次读取一个字节,读取性能差,并且读取汉字输出会乱码

FileInputStream(文件字节输入流)

作用:以内存为基准,把文件中的数据以字节的形式读入到内存中来。

方法名称说明
public int read()每次读取一个字节返回,如果发现没有数据可读会返回-1.
public int read(byte[] buffer)每次用一个字节数组去读取数据,返回字节数组读取了多少个字节, 如果发现没有数据可读会返回-1.

注意: 使用FileInputStream每次读取多个字节,读取性能得到了提升,但读取汉字输出还是会乱码。

文件字节输入流:一次读取完全部字节

方式一:自己定义一个字节数组与被读取的文件大小一样大,然后使用该字节数组,一次读完文件的全部字节。

方式二:Java官方为InputStream提供了如下方法,可以直接把文件的全部字节读取到一个字节数组中返回。

方法名称说明
public int read(byte[] buffer)每次用一个字节数组去读取,返回字节数组读取了多少个字节,如果发现没有数据可读会返回-1.
public byte[] readAllBytes()直接将当前字节输入流对应的文件对象的字节数据装到一个字节数组返回
提问
  • 直接把文件数据全部读取到一个字节数组可以避免乱码,是否存在问题?
    • 如果文件过大,创建的字节数组也会过大,可能引起内存溢出。
  • 读写文本内容更适合用 字符流
  • 字节流 适合做数据的转移, 如: 文件复制等

FileOutputStream(文件字节输出流)

作用:以内存为基准,把内存中的数据以字节的形式写出到文件中去。

构造器说明
public FileOutputStream(File file)创建字节输出流管道与源文件对象接通
public FileOutputStream(String filepath)创建字节输出流管道与源文件路径接通
public FileOutputStream(File file,boolean append)创建字节输出流管道与源文件对象接通,可追加数据
public FileOutputStream(String filepath,boolean append)创建字节输出流管道与源文件路径接通,可追加数据
方法名称说明
public void write(int a)写一个字节出去
public void write(byte[] buffer)写一个字节数组出去
public void write(byte[] buffer , int pos , int len)写一个字节数组的一部分出去。
public void close() throws IOException关闭流。
  • 字节输出流如何实现写出去的数据可以换行?
    • 写"\r\n"的字节数组表示形式

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

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

相关文章

(精)3款好用的企业防泄密软件推荐 | 好用电脑文件防泄密软件推荐

企业防泄密是指通过一系列的技术手段和管理措施,防止企业的敏感信息、核心技术、商业机密等被未经授权的第三方获取或泄露。 这不仅是保护企业资产和知识产权的重要手段,也是维护企业声誉、保持市场竞争力的关键因素。 而企业防泄密软件则是专门用于实…

JavaScript之模块化规范详解

文章的更新路线:JavaScript基础知识-Vue2基础知识-Vue3基础知识-TypeScript基础知识-网络基础知识-浏览器基础知识-项目优化知识-项目实战经验-前端温习题(HTML基础知识和CSS基础知识已经更新完毕) 正文 CommonJS、UMD、CMD和ES6是不同的模块…

2024/4/21周报

文章目录 摘要Abstract文献阅读题目问题贡献方法卷积及池化层LSTM层CNN-LSTM模型 数据集参数设置评估指标实验结果 深度学习使用GRU和LSTM进行时间预测1.库的导入&数据集2.数据预处理3.模型定义4.训练过程5.模型训练 总结 摘要 本周阅读了一篇基于CNN-LSTM黄金价格时间序列…

【热门话题】常用经典目标检测算法概述

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 常用经典目标检测算法概述1. 滑动窗口与特征提取2. Region-based方法R-CNN系列M…

心理学|变态心理学健康心理学——躯体疾病患者的一般心理特点

一、对客观世界和自身价值的态度发生改变 患者除了内部器官有器质或功能障碍外,他们的自我感觉和整个精神状态也会发生变化。使人改变对周围事物的感受和态度,也可以改变患者对自身存在价值的态度。这种主观态度的改变,可以使患者把自己置于人…

【Linux驱动层】iTOP-RK3568学习之路(三):字符设备驱动框架

一、总体框架图 二、字符设备相关函数 静态申请设备号 register_chrdev_region 函数原型:register_chrdev_region(dev_t from, unsigned count, const char *name) 函数作用:静态申请设备号,可以一次性申请多个连续的号,count指定…

Python读取influxDB数据库(二)(influxDB2.X版本)

1. influxDB连接 首先在浏览器中输入influxDB的IP和端口,然后输入账号密码进入到influxDB数据库来进行数据的相关操作: 里面的bucket相当于sql中的数据库,_measurement相当于sql中的表 2. 获取influxDB数据库的token方法 3. 写查询语句来查询…

新火种AI|号称“史上最强大开源模型”的Llama3,凭什么价值百亿美金?

作者:小岩 编辑:彩云 4月19日,Facebook母公司Meta重磅推出了Llama3。 即便大家现在对于大厂和巨头频繁迭代AI模型的行为已经见怪不怪,Meta的Llama3仍旧显得与众不同,因为这是迄今最强大的开源AI模型。 Meta推出了重…

Redis从入门到精通(二十一)Redis最佳实践(二)mset、pipeline、慢查询优化、内存划分

文章目录 前言7.2 批处理优化7.2.1 命令执行流程7.2.2 mset7.2.3 Pipeline7.2.4 集群下的批处理7.2.4.1 问题与解决方案7.2.4.2 基于Spring的串行化执行 7.3 服务器端优化7.3.1 持久化配置7.3.2 慢查询优化7.3.2.1 什么是慢查询7.3.2.2 如何查看慢查询 7.3.3 命令及安全配置7.3…

智慧安防边缘计算硬件AI智能分析网关V4算法启停的操作步骤

TSINGSEE青犀视频智能分析网关V4内置了近40种AI算法模型,支持对接入的视频图像进行人、车、物、行为等实时检测分析,上报识别结果,并能进行语音告警播放。硬件管理平台支持RTSP、GB28181协议、以及厂家私有协议接入,可兼容市面上常…

MySQL 基础语法(2)

文章目录 创建表查看表修改表表数据插入 本文为表结构相关的基础语言库相关的基础语句 创建表 CREATE TABLE table_name ( field1 datatype comment xxx, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎;CREATE TABLE&#xff1…

算法竞赛相关问题总结记录

前言 日常在校生或者是工作之余的同学或多或少都会参加一些竞赛,参加竞赛一方面可以锻炼自己的理解与实践能力,也能够增加自己的生活费,竞赛中的一些方案也可以后续作为自己论文的base,甚至是横向课题的框架。在算法竞赛中算法的差别个人感觉差距都不大&…

创建一个空的maven项目,整合SpringBoot和Redis

创建一个空的maven项目,整合SpringBoot和Redis 创建空的maven项目 在最新版的idea中创建maven项目的时候会让选择模板 如下图: 我们选择quickstart快速开始模板,quickstart快速开始模板创建的maven项目里面什么都不带,只有一个…

便携式手提万兆网络协议测试仪

便携式手提万兆网络协议测试仪 平台简介 便携式手提万兆网络协议测试仪,以FPGA万兆卡和X86主板为基础,构建便携式的手提设备。 FPGA万兆卡是以Kintex-7XC7K325T PCIeX4的双路万兆光纤网络卡,支持万兆网络数据的收发和网络协议的定制设计。 …

微服务之.SpringCloud AlibabaSentinel实现熔断与限流

一、概述 1.1介绍 Sentinel是阿里巴巴开源的一款服务保护框架,目前已经加入SpringCloudAlibaba中。官方网站: 官网https://sentinelguard.io/zh-cn/ 从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开…

计算机服务器中了locked勒索病毒怎么办,locked勒索病毒解密工具流程步骤

随着网络技术的不断应用与发展,越来越多的企业离不开网络,网络大大提升了企业的办公效率水平,也为企业的带来快速发展,对于企业来说,网络数据安全成为了大家关心的主要话题。近日,云天数据恢复中心接到多家…

注意libaudioProcess.so和libdevice.a是不一样的,一个是动态链接,一个是静态

libaudioProcess.so是动态链接,修改需要改根文件系统,需要bsp重新配置 libdevice.a是静态链接,直接替换就行 动态链接文件修改 然后执行fw_update.sh

JAVA学习笔记29(集合)

1.集合 ​ *集合分为:单列集合、双列集合 ​ *Collection 接口有两个重要子接口 List Set,实现子类为单列集合 ​ *Map接口实现子类为双列集合,存放的King–Value ​ *集合体系图 1.1 Collection接口 1.接口实现类特点 1.collection实现…

射频识别技术助力产品分拣:提升效率与准确性

射频识别技术助力产品分拣:提升效率与准确性 RFID技术在产品分拣中具有重要的应用,它利用射频信号进行非接触式的自动识别,能够高效、准确地完成产品分拣工作。 在产品分拣中,RFID技术的主要应用方式是在产品上粘贴RFID电子标签&…

阿里云mysql8.0 this is incompatible withsql mode=only full group by

阿里云RDS中mysql5.6升级为8.0后,出现如下问题: ### Error querying database. Cause:java.sql.SQLSyntaxErrorException: Expression #1 of SELECT listis not in GROUP BY clause and contains nonaggregatedcolumn temp.product_id which is not fun…