重生之我要精通JAVA--第六周笔记

File

路径

相对路径

路径1:“a.txt”
路径2:“abc\\a.txt”

绝对路径

路径1:“c:\\a.txt”
路径2:“c:\\abc\\a.txt”

  • File对象就表示一个路径,可以是文件的路径、也可以是文件夹的路径
  • 这个路径可以是存在的,也允许是不存在的
方法名称说明
public File(String pathname)根据文件路径创建文件对象
public File(String parent, String child)根据父路径名字符串和子路径名字符串创建文件对象
public File(File parent, String child)根据父路径名对应文件对象和子路径名字符串创建文件对象

常见成员方法

判断、获取

方法名称说明
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 createNewFile()创建一个新的空的文件
public boolean mkdir()创建单级文件夹
public boolean mkdirs()创建多级文件夹
public boolean delete()删除文件、空文件夹
  1. createNewFile 创建一个新的空的文件

    • 细节1:如果当前路径表示的文件是不存在的,则创建成功,方法返回true

      如果当前路径表示的文件是存在的,则创建失败,方法返回false

    • 细节2:如果父级路径是不存在的,那么方法会有异常IOException

    • 细节3:createNewFile方法创建的一定是文件,如果路径中不包含后缀名,则创建一个没有后缀的文件

  2. mkdir make Directory,文件夹(目录)

    • 细节1:windows当中路径是唯一的,如果当前路径已经存在,则创建失败,返回false
    • 细节2:mkdir方法只能创建单级文件夹,无法创建多级文件夹
  3. mkdirs 创建多级文件夹

    细节:既可以创建单级的,又可以创建多级的文件夹

  4. delete

    • 如果删除的是文件,则直接删除,不走回收站
    • 如果删除的是空文件夹,则直接删除,不走回收站
    • 如果删除的是有内容的文件夹,则删除失败

获取并遍历

方法名称说明
public File[] listFiles()获取当前该路径下所有内容
  • 当调用者File表示的路径不存在时,返回null
  • 当调用者File表示的路径是文件时,返回null
  • 当调用者File表示的路径是一个空文件夹时,返回一个长度为0的数组
  • 当调用者File表示的路径是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
  • 当调用者File表示的路径是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件
  • 当调用者File表示的路径是需要权限才能访问的文件夹时,返回null
方法名称说明
public static File[] listRoots()列出可用的文件系统根
public String[] list()获取当前该路径下所有内容
public String[] list(FilenameFilter filter)利用文件名过滤器获取当前该路径下所有内容
public File[] listFiles()获取当前该路径下所有内容
public File[] listFiles(FileFilter filter)利用文件名过滤器获取当前该路径下所有内容
public File[] listFiles(FilenameFilter filter)利用文件名过滤器获取当前该路径下所有内容

IO流

分类

image-20240521171323931

纯文本文件:Windows自带的记事本打开能读懂

FileOutputStream

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

一、构造方法

构造方法描述
FileOutputStream(String name)使用指定的文件名创建一个 FileOutputStream 对象。如果文件不存在,会创建一个新文件。
FileOutputStream(String name, boolean append)使用指定的文件名和 append 标志创建 FileOutputStream 对象。如果 appendtrue,字节将被写入文件末尾。
FileOutputStream(File file)使用指定的 File 对象创建 FileOutputStream 对象。如果文件不存在,会创建一个新文件。
FileOutputStream(File file, boolean append)使用指定的 File 对象和 append 标志创建 FileOutputStream 对象。如果 appendtrue,字节将被写入文件末尾。
FileOutputStream(FileDescriptor fdObj)创建一个文件输出流以写入指定的文件描述符。

二、书写步骤

  1. 创建字节输出流对象
  2. 写数据
  3. 释放资源

细节

  1. 创建字节输出流对象
    细节1:参数是字符串表示的路径或者是File对象都是可以的
    细节2:如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的。
    细节3:如果文件已经存在,则会清空文件
  2. 写数据
    细节:write方法的参数是整数,但是实际上写到本地文件中的是整数在ASCII上对应的字符
  3. 释放资源
    细节:每次使用完流之后都要释放资源
import java.io.FileOutputStream;
import java.io.IOException;public class Test {public static void main(String[] args) throws IOException {FileOutputStream fos = new FileOutputStream("..\\5.20\\a.txt");fos.write(97);fos.close();}
}

三、write用法

方法名称说明
void write(int b)一次写一个字节数据
void write(byte[] b)一次写一个字节数组数据
void write(byte[] b, int off, int len)一次写一个字节数组的部分数据
public class Test {public static void main(String[] args) throws IOException {FileOutputStream fos = new FileOutputStream("..\\5.20\\a.txt");String str = "abcd";byte[] bytes = str.getBytes();fos.write(bytes);fos.close();}
}

void write(byte[] b, int off, int len)

off:起始索引:字节数组b中的起始偏移量。表示从数组的哪个索引位置开始写入数据。(off必须是非负整数,且不能超过数组b的长度。)

len:写入字节数:这是要写入的字节数。从off位置开始,连续写入len个字节。

四、换行与续写

1.换行
写出一个换行符即可
windows:\r\n
Linux:\n
Mac:\r

在windows操作系统当中,java对回车换行进行了优化。
虽然完整的是\r\n,但是我们写其中一个\r或者\n,
java也可以实现换行,因为java在底层会补全。

2.续写

FileOutputStream(String name, boolean append)

FileOutputStream(File file, boolean append)

如果 appendtrue,字节将被写入文件末尾。

    FileOutputStream fos = new FileOutputStream("..\\5.20\\a.txt",true);

FileInputStream

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

一、构造方法

构造方法参数描述
FileInputStream(File file)要读取的文件对象。
FileInputStream(String name)要读取的文件的路径名。
FileInputStream(FileDescriptor fd)文件描述符对象,表示已打开的文件。

二、书写步骤

  1. 创建字节输入流对象
  2. 读数据
  3. 释放资源

细节

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

三、循环读取

import java.io.FileInputStream;
import java.io.IOException;public class Demo {public static void main(String[] args) throws IOException {FileInputStream fis = new FileInputStream("..\\5.20\\a.txt");int b;while ((b = fis.read()) != -1) {System.out.print((char) b);}fis.close();}
}

四、read

方法名称说明
public int read()一次读一个字节数据
public int read(byte[] buffer)一次读一个字节数组数据

image-20240521200038868

字符集

ASCII

存储英文,一个字节就足以

计算机的存储规则

  1. GB2312字符集:1980年发布,1981年5月1日实施的简体中文汉字编码国家标准。
    收录7445个图形字符,其中包括6763个简体汉字
  2. BIG5字符集:台湾地区繁体中文标准字符集,共收录13053个中文字,1984年实施。
  3. GBK字符集:2000年3月17日发布,收录21003个汉字
    包含国家标准GB13000-1中的全部中日韩汉字,和BIG5编码中的所有汉字。
  4. Unicode字符集:
    国际标准字符集,它将世界各种语言的每个字符定义一个唯一的编码,以满足跨语言、跨平台的文本信息转换。

系统显示:ANSI

windows系统默认使用的就是GBK。

image-20240521205532934

为什么会有乱码

  1. 读取数据时未读完整个汉字
  2. 编码和解码时的方式不统一

编码和解码

Java中编码的方法

String类中的方法说明
public byte[] getBytes()使用默认方式进行编码
public byte[] getBytes(String charsetName)使用指定方式进行编码

Java中解码的方法

String类中的方法说明
String(byte[] bytes)使用默认方式进行解码
String(byte[] bytes, String charsetName)使用指定方式进行解码

UTF

UTF-8、UTF-16 和 UTF-32 是三种不同的字符编码方案,它们在存储字符时使用不同的字节长度:

  1. UTF-8: UTF-8 是一种变长编码方案,字符的存储长度可以是 1 到 4 个字节。在 UTF-8 中,常用的 ASCII 字符(0 到 127)使用单个字节存储,而其他字符则使用多个字节。通常情况下,UTF-8 编码的字节数如下:
    • 1 字节:ASCII 字符
    • 2 字节:大多数欧洲语言的常用字符
    • 3 字节:较少使用的非常见字符
    • 4 字节:较少见的字符和符号
  2. UTF-16: UTF-16 使用固定长度的 2 个字节来存储大多数常见字符,但一些辅助字符需要使用额外的 2 个字节(总共 4 个字节)进行编码。这意味着大多数字符都占用 2 个字节,但一些罕见字符占用 4 个字节。
  3. UTF-32: UTF-32 使用固定长度的 4 个字节来表示每个字符,无论字符的编码大小。

字符流

字符流的底层其实就是字节流

字符流 = 字节流 + 字符集

特点

  • 输入流:一次读一个字节,遇到中文时,一次读多个字节
  • 输出流:底层会把数据按照指定的编码方式进行编码,变成字节再写到文件中

image-20240521211433164

FileReader

  1. 创建字符输入流对象

    构造方法说明
    public FileReader(File file)创建字符输入流关联本地文件
    public FileReader(String pathname)创建字符输入流关联本地文件

    细节1:如果文件不存在,就直接报错

  2. 读取数据

    成员方法说明
    public int read()读取数据,读到末尾返回-1
    public int read(char[] buffer)读取多个数据,读到末尾返回-1

    细节1:按字节进行读取,遇到中文,一次读多个字节,读取后解码,返回一个整数
    细节2:读到文件末尾了,read方法返回-1

  3. 释放资源

    成员方法说明
    public int close()释放资源/关闭流
构造方法说明
public FileWriter(File file)创建字符输出流关联本地文件
public FileWriter(String pathname)创建字符输出流关联本地文件
public FileWriter(File file, boolean append)创建字符输出流关联本地文件,续写
public FileWriter(String pathname, boolean append)创建字符输出流关联本地文件,续写
成员方法
成员方法说明
void write(int c)写出一个字符
void write(String str)写出一个字符串
void write(String str, int off, int len)写出一个字符串的一部分
void write(char[] cbuf)写出一个字符数组
void write(char[] cbuf, int off, int len)写出字符数组的一部分
  • 创建字符输出流对象
    细节1:参数是字符串表示的路径或者File对象都是可以的
    细节2:如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的
    细节3:如果文件已经存在,则会清空文件,如果不想清空可以打开续写开关
  • 写数据
    细节:如果write方法的参数是整数,但是实际上写到本地文件中的是整数在字符集上对应的字符
  • 释放资源
    细节:每次使用完流之后都要释放资源

字符流原理解析

  1. 创建字符输入流对象
    底层::联文件,并创建缓冲区(长度为8192的字节数)
  2. 读取数据

底层

  1. 判断缓冲区中是否有数据可以读取
  2. 缓冲区没有数据:就从文件中获取数据,装到缓冲区中,每次尽可能装满缓冲区
    如果文件中也没有数据了,返回-1
  3. 缓冲区有数据:就从缓冲区中读取
    空参的read方法:一次读取一个字节,遇到中文一次读多个字节,把字节解码并转成十进制返回
    有参的read方法:把读取字节,解码,强转三步合并了,强转之后的字符放到数组中

已经到底啦!!

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

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

相关文章

linux线程,线程控制与线程相关概念

线程概念 线程这个词或多或少大家都听过,今天我们正式的来谈一下线程; 在我一开始的概念中线程就是进程的一部分,一个进程中有很多个线程,这个想法基本是正确的,但细节部分呢我们需要细细讲解一下; 什么…

“揭秘:为什么羊驼Ollama成为计算机运行大型语言模型的最佳拍档?“

最近,AIM 评测了在计算机上本地运行大语言模型(LLM)的最佳工具,Ollama 脱颖而出,成为最高效的解决方案,提供了无与伦比的灵活性。Ollama 是 Jeffrey Morgan 开发的一款开源工具,它正在彻底改变爱…

我被恐吓了,对方扬言要压测我的网站

大家好我是聪,昨天真是水逆,在技术群里交流问题,竟然被人身攻击了!骂的话太难听具体就不加讨论了,人身攻击我可以接受,我接受不了他竟然说要刷我接口!!!!这下…

【NumPy】掌握NumPy的histogram函数:数据直方图的生成与应用详解

🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

速度百倍提升,高性能 Python 编译器 Codon 火了

引言 在当下的编程世界里,Python由于其易用性和强大的库支持在数据科学、人工智能和网页开发等多个领域占据着举足轻重的地位。然而,Python的执行速度往往成为开发者的一大痛点。 针对 这一问题,Codon项目正试图提供一个高效的解决方案。Codo…

小识MFC,一套设计优雅与不优雅并存的类库----小话MFC(2)

Q1: CPoint继承于POINT,这样有什么好处? A: 继承的一个最基本的好处当然就是减少代码量。CPoint和POINT内部数据一样,只是一个提供了更多的方法来操作对象。 typedef struct tagPOINT {LONG x;LONG y; } POINT, *P…

SpringMvc-restful设计风格

Restful 1、入门1.1 简介1.2 实例 1、入门 1.1 简介 RESTFul是什么 RESTFul是WEB服务接口的一种设计风格。 RESTFul定义了一组约束条件和规范&#xff0c;可以让WEB服务接口更加简洁、易于理解、易于扩展、安全可靠。 1.2 实例 web.xml <?xml version"1.0"…

5、xss-labs之level6

一、level6-----大小写绕过 1、测试分析 测试了之前用过的payload&#xff0c;发现都不行&#xff0c;并且level4使用的Java伪协议也不行&#xff0c;可以得出<>、script、onclick都被过滤 2、构造payload 因为href被过滤&#xff0c;可以试一下大写HREF 初试payload…

没人愿意和我们最好的工程师一起工作

几年前&#xff0c;有一位技术非常好的工程师&#xff08;我们叫他“乔恩”&#xff09;为我工作。 他的代码写得很好&#xff0c;代码审查&#xff08;PRs&#xff09;也完成得很快。从技术角度来看&#xff0c;他是个出色的工程师。 但是我们从其他工程师那里得到了一些关于…

使用nvm管理node多版本(安装、卸载nvm,配置环境变量,更换npm淘宝镜像)淘宝的镜像域名更换

最近 使用nvm 管理 node 的时候发现nvm install node版本号 总是失败。 nvm install 20.12.2Error retrieving "http://npm.taobao.org/mirrors/node/latest/SHASUMS256.txt": HTTP Status 404查看原因&#xff0c;因为淘宝的镜像域名更换&#xff0c;由于 npm.taob…

基于直接二元搜索的片上偏振分束器设计 (Nature Photonics, 9, 6, (2015))案例复现

时间—2024.6.08 腾讯会议 智能算法驱动的光子学设计与应用

Dream

好像很多人梦寐以求的都是别人已经拥有的&#xff0c;多少人奋斗一生的目标&#xff0c;却只是别人的起点&#xff0c;人生而自由&#xff0c;只是不在枷锁之中&#xff0c;生活中没有人不遗憾&#xff0c;只是没有人喊疼&#xff0c;时间不会重来&#xff0c;已经过去了就让它…

vue3 使用vant

使用前提&#xff1a; vite创建的vue3项目 vanthttps://vant-ui.github.io/vant/#/zh-CN/home npm i vant 引入样式&#xff1a; main.js import vant/lib/index.css vant封装 import { showLoadingToast,closeToast,showDialog,showConfirmDialog } from vant;export func…

Typora图床配置优化(PicGo-Core(command line) 插件 + gitee)

Typora图床配置优化&#xff08;PicGo-Core(command line) 插件 gitee&#xff09; 前言 在日常使用Typora编写markdown笔记时&#xff0c;经常需要插入图片来帮助理解和整理逻辑。然而&#xff0c;由于图片保存在本地&#xff0c;上传到网上时经常出现图片不见或错误警告的…

育菁桌面式数控机床助力教育装备

桌面式数控机床是一种小型化的数控机床&#xff0c;它通常具有紧凑的设计和较小的体积&#xff0c;可以放置在桌面上进行操作。 这种车床结合了数控技术&#xff0c;通过计算机编程来控制机床的运动和加工过程&#xff0c;以实现高精度、高效率的工件加工。 桌面式数控车床是一…

如何部署一套高可用性的医院信息管理系统?基于华为云、SpringBoot、Vue及Jenkins、Gitlab的CI/CD流程

目录 一、项目背景 二、项目架构 三、项目部署流程 1、前端部署 2、后端部署 3、监控与运维 四、项目过程 一、项目背景 随着医疗信息化程度的不断加深&#xff0c;医院信息管理系统的稳定性和可用性成为了医疗机构日常运营的关键。在这个数字化时代&am…

选择快充时代下的理想充电器与电压诱骗芯片PW6606

随着科技的不断进步&#xff0c;我们的电子设备对于充电速度和效率的要求越来越高。在快充技术迅猛发展的今天&#xff0c;了解不同类型的充电器及其对应的快充协议&#xff0c;以及如何选择适合的电压诱骗芯片&#xff0c;对于提升充电体验和保障设备安全显得尤为重要。 一、快…

生信网络学院|05月31日《SOLIDWORKS Manage 产品周期管理》

课程主题&#xff1a;SOLIDWORKS Manage 产品周期管理 课程时间&#xff1a;2024年05月31日 14:00-14:30 主讲人&#xff1a;付舰 生信科技 PLM实施顾问 1、SOLIDWORKS Manage介绍 2、周期流程管理 3、产品项目管理 4、项目会议管理 5、项目问题管理 安装腾讯会议客户端…

Android 13 VSYNC重学习

Android 13 VSYNC重学习 引言 学无止境&#xff0c;一个字干就完事&#xff01; 源码参考基于Android 13 aosp&#xff01; 一. Android VSync模块开胃菜 在开始正式的分析之前&#xff0c;我们先简单对Android的Vsync模块简单介绍下,如下图所示&#xff0c;其中: HW_VSync是…

【Java面试】一、Redis篇(上)

文章目录 0、准备1、缓存穿透&#xff1a;不存在的key2、缓存击穿&#xff1a;热点key过期3、缓存雪崩&#xff1a;大批key同时过期4、双写一致性4.1 要求高一致性4.2 允许一定的一致延迟 5、面试 0、准备 Redis相关概览&#xff1a; 以简历上所列的项目为切入点&#xff0c;展…