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

news2024/9/8 10:40:52

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.coloradmin.cn/o/1703665.html

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

相关文章

c++ (命名空间 字符串)

思维导图&#xff1a; 定义自己得命名空间myspace,在myspace中定义string类型变量s1,再定义一个函数完成字符串逆置 #include <iostream> #include <cstring> //定义自己得命名空间myspace,在myspace中定义string类型变量s1,再定义一个函数完成字符串逆置 using n…

西门子smart line触摸屏软件安装 WinCC Flexible Smart V4SP1 V3

提示&#xff1a;Wincc flexible smart软件为西门子Smart line系列触摸屏的专用组态软件&#xff0c;这款屏不能用博途来组态&#xff0c;只能用这个软件来组态。西门子Smart line系列触摸屏的常用型号为SMART 700 IE V3/V4&#xff0c;SMART 1000 IE V3/V4。 Wincc flexible …

引力为什么会让时间变慢,给你通俗的解读

爱因斯坦的狭义相对论表明&#xff0c;速度会让时间变慢&#xff0c;速度越快时间就越慢。而广义相对论告诉我们&#xff0c;引力同样会让时间变慢&#xff0c;引力越强时间就越慢。 时间膨胀 速度对时间的影响就先不解释了&#xff0c;之前的科普文章介绍了很多&#xff0c;今…

Android开发 -- JNI开发

1.配置JNI环境 创建JNI文件夹 在项目的主目录中创建一个名为 JNI 的文件夹。这个文件夹将包含所有的本地源代码和配置文件。 编写Android.mk文件 这个文件是一个 Makefile&#xff0c;用来指导 NDK 如何编译和构建本地代码。 #清除之前定义的变量&#xff0c;确保每个模块的…

电流采样(分流器与霍尔传感器)

在对于电信号采集的设计中&#xff0c;其中对电流信号的采集是非常常见的&#xff0c;根据电流信号的属性&#xff0c;如信号大小、信号周期等因素&#xff0c;以及采样的需求指标不一样&#xff0c;往往需要选择不同的采样方式进行采样。 下面主要介绍分流器和霍尔元件采样电…

【漏洞复现】号卡极团分销管理系统 ue_serve.php 任意文件上传漏洞

0x01 产品简介 号卡极团分销 管理系统&#xff0c;同步对接多平台&#xff0c;同步订单信息&#xff0c;支持敢探号一键上架&#xff0c;首页多套U|商品下单页多套模板&#xff0c;订单查询支持实时物流信息、支持代理商自定义域名、泛域名绑定&#xff0c;内置敢探号、172平台…

写好的文章怎样联系媒体投稿?

作为单位信息宣传的桥梁,我肩负着将单位的每一次活动、每一项成就转化为社会认可与赞美的重任。初涉此职,我满腔热血,以为凭借扎实的文字功底与不懈的努力,便能在各大媒体平台上为单位赢得一席之地。然而,现实很快就给了我一记响亮的耳光。 我最初采取的是最直接的方式——邮箱…

win10/win11 优先调用大核的电源计划性能设置

前言 大小核&#xff0c;即Intel 12代开始的P-core&#xff08;性能核&#xff0c;一般叫大核&#xff09;和E-core&#xff08;能效核&#xff0c;一般叫小核&#xff09;异核架构。说下个人理解&#xff0c;就是英特尔为了增加cpu性能&#xff0c;但是又因为架构和功耗的限制…

微信小程序上传包过大的最全解决方案!

微信小程序的发布大小限制是2MB。然而一个程序怎么能这么小&#xff1f; 介绍一下项目中的经验。 新项目 如果是刚开始做的新项目&#xff0c;一定确定好自己要用的Ui框架&#xff0c;而且确定之后&#xff0c;千万不要引入别的&#xff0c;否则占大小&#xff01;&#xff0…

人类行为验证处理方案 —— 脱离UI组件库实现登录、注册+表单校验

目录 01: 构建登录模块基础UI结构 02: 表单校验实现原理与方案分析 表单校验的实现原理 自定义表单校验方案分析 文章中的方案实现 03: 基于 vee-validate 实现普适的表单校验 04: 什么是人类行为验证&#xff1f;它的目的、实现原理、构建方案分别是什么&am…

three.js官方案例webgl_loader_fbx.html学习

目录 1.1 添加库引入 1.2 添加必要的组件scene,camera,webrenderer等 1.3 模型加载 1.4 半球光 1.5 动画 1.6 换个自己的fbx模型 1.7 fbx模型和fbx动画关联 1.7 html脚本全部如下 1.8 fbx.js全部脚本如下 1.1 添加库引入 import * as THREE from three; import Stats …

AI重塑了我的工作流

阅读内容 Inhai: Agentic Workflow&#xff1a;AI 重塑了我的工作流 4 种主要的 Agentic Workflow 设计模式 Reflection&#xff08;反思&#xff09;&#xff1a;让 Agent 审视和修正自己生成的输出。 举例&#xff1a;如果有两个 Agent&#xff1a;一个负责 Coding&#…

【加密与解密(第四版)】第十二章笔记

第十二章 注入技术 12.1 DLL注入方法 在通常情况下&#xff0c;程序加载 DLL的时机主要有以下3个&#xff1a;一是在进程创建阶段加载输入表中的DLL&#xff0c;即俗称的“静态输人”;二是通过调用 LoadLibrary(Ex)主动加载&#xff0c;称为“动态加载”&#xff1b;三是由于系…

实现UI显示在最上面的功能

同学们肯定遇到过UI被遮挡的情况&#xff0c;那如何让UI显示在最前面呢&#xff0c;先看效果 原理:UI的排序方式是和unityHierarchy窗口的层级顺序有关的&#xff0c;排序在下就越后显示&#xff0c;所以按照这个理论&#xff0c;当我们鼠标指到UI的时候把层级设置到最下层就好…

小猪APP分发:一站式免费应用推广的理想平台

在日益拥挤的移动应用市场中&#xff0c;对于独立开发者和新兴应用而言&#xff0c;找到一个高效且成本效益高的分发渠道至关重要。这正是小猪APP分发平台www.appzhu.cn脱颖而出的原因&#xff0c;它不仅提供了一个全面的解决方案&#xff0c;帮助开发者免费推广他们的应用程序…

宠物空气净化器终极PK,霍尼韦尔、小米、希喂哪款去浮毛最厉害?

宠物毛发和浮毛问题几乎困扰着每一个热爱动物的家庭。宠物的毛发不仅会附着在家具、地毯和衣物上&#xff0c;还可能引起过敏反应&#xff0c;特别是对于那些对宠物毛发敏感的人来说。此外&#xff0c;宠物毛发还可能携带细菌和尘螨&#xff0c;进一步影响家庭环境的清洁和健康…

【讲解下Web前端三大主流的框架】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

STM32系列(HAL库)——F103C8T6通过HC-SR04超声波模块实现测距

一、模块资料 &#xff08;1&#xff09;模块简介 超声波是振动频率高于20kHz的机械波。它具有频率高、波长短、绕射现象小、方向性好、能够成为射线而定向传播等特点。HC-SRO4是一款尺寸完全兼容老版本&#xff0c;增加UART和IIC功能的开放式超声波测距模块,默认条件下,软件…

【简单介绍下容器是什么?】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

001.数据分析_NumPy

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…