JavaEE初阶Day 15:文件IO(1)

目录

  • Day 15:文件IO(1)
    • IO
    • 文件
      • 1. 路径
      • 2. 文件的分类
      • 3. 使用Java针对文件系统进行操作
        • 3.1 属性
        • 3.2 构造方法
        • 3.3 方法

Day 15:文件IO(1)

IO

  • I:Input输入

  • O:Output输出

输入输出规则

在这里插入图片描述

统一以CPU为基准,通过控制台读取数据到内存是输入;把数据打印显示到控制台上是输出

文件

文件本身是广义的概念,在操作系统中把很多的资源(软件资源/硬件资源)都抽象成文件,但此处谈到的文件,特指狭义的文件,也就是平时保存在硬盘上的这些文件

文件夹也是一种文件,称为目录文件,也是保存在硬盘上,在硬盘上,存在很多文件和目录,目录又存在一定的嵌套关系,整体这一套结构是一个树型结构

1. 路径

文件非常多,目录也非常多,目录之间还能嵌套,需要在上述体系中能够有一种方式,标识某个具体的文件,通过这个机制,就能具体定位到某个文件上

从根节点出发,一层一层往下走,最终到达目标文件之后,中间这些目录集合在一起,就构成了路径

  • 绝对路径:以盘符开头的路径,起点是此电脑
  • 相对路径:起点可以是任意路径

D:\program\qq\Bin\qq.exe:目录和目录之间,使用/或者\分割,但是这个事情只局限在Windows上

据说微软在开发DOS的时候,最初定义的目录分隔符是/,当时主流系统Unix家族,都是/表示的,但是在发布之前,产品经理,突然改需求,改成\表示,发布之后,遭到怒喷,之后也开始支持/,现在Windows同时支持/和\两种,Linux、Mac、Android和IOS都是Unix的后裔,只支持/,因此推荐使用/

**例子:**找qq.exe

  • 当前的基准(工作目录)是D:\program\qq\Bin,直接通过./qq.exe找到,.在相对路径中表示当前所在的位置
  • 当前的基准(工作目录)是D:\program\qq,通过./Bin/qq.exe找到
  • 当前的基准(工作目录)是D:\program,通过./qq/Bin/qq.exe找到
  • 当前的基准(工作目录)是D:\program\qq\Bin\plugins,此时需要通过..回到上一级目录,../qq.exe找到

Linux和Windows的相对路径/绝对路径规则完全相同

2. 文件的分类

文件的分类方式有很多种,此处主要讨论一种和编写代码密切相关的

  • 文本文件:在硬盘上存储的数据是文本数据,给人看的
  • 二进制文件:在硬盘上存储的数据是二进制数据,给程序看的

无论是文本文件还是二进制文件,本质上都是01这样的二进制数据,文本数据指的是字符串每个部分都是“合法”,文本文件中的二进制数据能够构成合法的字符(GBK/UTF8等码表有对应),区分一个文件是文本还是二进制,在编码处理的时候,处理方式不同

一个简单粗暴但是有效的区分二进制文件和文本文件的方法,使用记事本打开,如果不是乱码就是文本文件,否则就是二进制文件,记事本属于把文件内容,按照文本的方式来理解,如果理解成功,也就意味着查表成功了,不理解就是二进制文件

日常常见的一些:docx、pptx、MP3、MP4、pdf都属于二进制文件,md、html、java、c都属于文本文件

docx是富文本,不仅仅是把文本,还包含格式、样式等其他很多信息,总体是通过二进制来表示的

3. 使用Java针对文件系统进行操作

Java标准库提供了File类表示一个文件,进一步的通过File提供的方法,就可以进行文件系统操作了

File类出自于java.io包里面,和输入输出相关的内容就是在这个包里面

3.1 属性
修饰符及类型属性说明
static StringpathSeparator依赖于系统的路径分隔符,String类型的表示
static charpathSeparator依赖于系统的路径分隔符,char类型的表示

pathSeparator:Java为了能够跨平台,专门提供了变量,如果是windows版本的jdk上述变量值就是\,如果是Linux/mac版本的jdk就是/

3.2 构造方法
签名说明
File(File parent, String child)根据父目录+孩子文件路径,创建⼀个新的File实例
File(String pathname)根据文件路径创建⼀个新的File实例,路径可以是绝对路径或者相对路径
File(String parent, String child)根据父目录+孩子文件路径,创建⼀个新的File实例,父目录用路径表示

字符串类型的路径,绝对路径/相对路径都是可以的,构造File对象的时候,写的路径不一定非得真实存在

3.3 方法

Flie类中的方法,操作系统都有api,Java调用了系统api,系统本身的api都是C/C++实现的,JVM本身就是C++,JVM里能够调用系统api,进一步封装一下,提供给上层Java程序调用

代码示例一

package IO;

import java.io.File;
import java.io.IOException;

public class Demo1 {
    public static void main(String[] args) throws IOException {
        File f = new File("d:/test.txt");
        System.out.println(f.getParent());//返回File对象的⽗⽬录⽂件路径
        System.out.println(f.getName());//返回FIle对象的纯⽂件名称
        System.out.println(f.getPath());//返回File对象的⽂件路径
        System.out.println(f.getAbsoluteFile());//返回File对象的绝对路径
        System.out.println(f.getCanonicalPath());//返回File对象的修饰过的绝对路径
    }
}
d:\
test.txt
d:\test.txt
d:\test.txt
D:\test.txt
package IO;

import java.io.File;
import java.io.IOException;

public class Demo1 {
    public static void main(String[] args) throws IOException {
        File f = new File("./test.txt");
        System.out.println(f.getParent());//返回File对象的⽗⽬录⽂件路径
        System.out.println(f.getName());//返回FIle对象的纯⽂件名称
        System.out.println(f.getPath());//返回File对象的⽂件路径
        System.out.println(f.getAbsoluteFile());//返回File对象的绝对路径
        System.out.println(f.getCanonicalPath());//返回File对象的修饰过的绝对路径
    }
}
.
test.txt
.\test.txt
D:\JAVA_CODE\J2024_04_19_IO\.\test.txt
D:\JAVA_CODE\J2024_04_19_IO\test.txt
  • throws IOException:表示输入输出过程中出现问题的异常,异常信息中会告诉我们具体的错误原因

  • "./test.txt":在IDEA里,直接运行程序,此时基准目录就是项目所在目录

  • f.getAbsoluteFile():把当前的工作路径和相对路径进行简单的拼接

  • f.getCanonicalPath():对上面方法拼接后的结果进行省略

代码示例二

package IO;

import java.io.File;
import java.io.IOException;

public class Demo2 {
    public static void main(String[] args) throws IOException {
        File f = new File("./test.txt");

        f.createNewFile();//根据File对象,⾃动创建⼀个空⽂件。成功创建后返回true

        System.out.println(f.exists());//判断File对象描述的⽂件是否真实存在
        System.out.println(f.isFile());//判断File对象代表的⽂件是否是⼀个普通⽂件
        System.out.println(f.isDirectory());//判断File对象代表的⽂件是否是⼀个⽬录
    }
}
true
true
false

创建文件什么情况下会失败:给出的路径非法/权限不足

代码示例三

package IO;

import java.io.File;

public class Demo3 {
    public static void main(String[] args) {
        File f = new File("./test.txt");
        f.delete();//根据File对象,删除该⽂件。成功删除后返回true
        System.out.println(f.exists());
    }
}
false
package IO;

import java.io.File;
import java.util.Scanner;

public class Demo3 {
    public static void main(String[] args) {
        File f = new File("./test.txt");
        Scanner scanner = new Scanner(System.in);
        f.deleteOnExit();//根据File对象,标注⽂件将被删除,删除动作会到JVM运⾏结束时才会进⾏
        scanner.next();
        System.out.println(f.exists());
    }
}

f.deleteOnExit();有些程序,运行过程中,会产生临时文件,就需要在进程结束之后,自动删除掉,这样的情况,就可以使用该方法

代码示例四

package IO;

import java.io.File;

public class Demo4 {
    public static void main(String[] args) {
        File dir = new File("./testDir");
        dir.mkdir();//创建File对象代表的⽬录
        System.out.println(dir.isDirectory());//判断File对象代表的⽂件是否是⼀个⽬录
        File dirs = new File("./testDirs/AAA/BBB/CCC");
        dirs.mkdirs();//创建File对象代表的⽬录,如果必要,会创建中间⽬录
        System.out.println(dirs.isDirectory());

    }
}

代码示例五

package IO;

import java.io.File;

public class Demo5 {
    public static void main(String[] args) {
        File f1 = new File("./test2.txt");
        File f2 = new File("./testDir/test2.txt");
        f1.renameTo(f2);//进⾏⽂件改名,也可以视为我们平时的剪切、粘贴操作
    }
}

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

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

相关文章

【golang-ent】go-zero框架 整合 ent orm框架实现一对一 一对多 多种姿势查询方式

一、ent的 O2O 问题 官方文档如下: https://entgo.io/zh/docs/schema-edges#o2o-same-type 1、ent O2O问题 官方提供了三种 one2one的方式,可以看到他全部使用了 mysql的 foregionKey 的方式进行关联,虽然举例了单表和双表的不同使用方式,但是我们实际使用mysql中是不创建…

深度解析 Spring 源码:探寻Bean的生命周期

文章目录 一、 Bean生命周期概述二、Bean生命周期流程图三、Bean生命周期验证3.1 代码案例3.2 执行结果 四、Bean生命周期源码4.1 setBeanName()4.2 setBeanFactory()4.3 setApplicationContext()4.4 postProcessBeforeInitialization()4.5 afterPropertiesSet()4.6 postProces…

银行数字化转型导师坚鹏:银行数字化转型5大战略定位

银行数字化转型必须建立清晰的战略定位,可以从以下5个方面建立,使广大银行员工明白银行数字化转型的重要性。 1.国家战略落地的重要抓手 银行是中国金融体系的核心,银行是做好“科技金融、绿色金融、普惠金融、养老金融和数字金融‘五篇大文…

【c++】继承学习(二):探索 C++ 中派生类的默认机制与静态成员共享

🔥个人主页:Quitecoder 🔥专栏:c笔记仓 目录 1.派生类的默认成员函数2.继承与友元3.继承与静态成员 朋友们大家好,本篇文章我们来学习继承的第二部分 1.派生类的默认成员函数 来看下面的类: class Person…

【自留】运行一个开源项目

运行一个开源项目 首先是运行起来 1. 拿到地址 拿到你想要的项目的地址 2. 克隆 打开编辑器 VSCode ,创建一个放项目的文件夹,控制台输入以下代码克隆项目 git clone 克隆地址gitee克隆地址在这看: github上项目的话,在这…

【python的魅力】:教你如何用几行代码实现文本语音识别

文章目录 引言一、运行效果二、文本转换为语音2.1 使用pyttsx32.2 使用SAPI实现文本转换语音2.3 使用 SpeechLib实现文本转换语音 三、语音转换为文本3.1 使用 PocketSphinx实现语音转换文本 引言 语音识别技术,也被称为自动语音识别,目标是以电脑自动将…

SSM+Vue+小程序+基于微信小程序的高校学生事务管理系统

项目配合学校日常生活通知,考试等管理需要,开发学校事务管理系统,maven管理依赖,mybatis处理数据库交互 学校管理 学院管理 班级管理 年级管理 教师管理 通知公告管理 学生资料管理 待办事项管理 教务处通知管理 讲座通…

【Conda】解决无名虚拟环境问题

文章目录 问题描述:无名虚拟环境解决步骤1 添加虚拟环境目录到envs步骤2 成功命名 问题描述:无名虚拟环境 如果不指定创建目录,默认创建在C盘用户目录下,这应该是很多人不愿意的吧。 指定目录创建虚拟环境命令如下: …

vector的使用

1.构造函数 void test_vector1() {vector<int> v; //无参的构造函数vector<int> v2(10, 0);//n个value构造&#xff0c;初始化为10个0vector<int> v3(v2.begin(), v2.end());//迭代器区间初始化,可以用其他容器的区间初始化vector<int> v4(v3); //拷贝…

基于yolov8的苹果腐败检测系统,系统既支持图像检测,也支持视频和摄像实时检测(pytorch框架)【python源码+UI界面+功能源码详解】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示&#xff1a; 基于yolov8的苹果腐败检测系统&#xff0c;系统既支持图像检测&#xff0c;也支持视频和摄像实时检测_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于yolov8的苹果腐败检测系统是在pytorc…

STM32 F103C8T6学习笔记17:类IIC通信(SMBus协议)—MLX90614红外非接触温度计

今日学习配置MLX90614红外非接触温度计 与 STM32 F103C8T6 单片机的通信 文章提供测试代码讲解、完整工程下载、测试效果图 本文需要用到的大概基础知识&#xff1a;1.3寸OLED配置通信显示、IIC通信、 定时器配置使用 这里就只贴出我的 OLED驱动方面的网址链接了&#xff1a…

Golang数组与切片

文章目录 数组数组介绍数组的定义方式访问与修改数组元素遍历数组元素数组指针 切片切片介绍切片的定义方式访问与修改切片元素添加切片元素切片的拷贝遍历切片元素string的切片 数组 数组介绍 数组介绍 在Go中&#xff0c;数组是一个由固定长度的特定类型元素组成的序列&…

[Algorithm][队列][宽搜BFS][N叉树的层序遍历][二叉树的锯齿形层序遍历][二叉树最大宽度][在每个树行中找最大值]详细讲解

目录 1.N 叉树的层序遍历1.题目链接2.算法思路详解3.代码实现 2.二叉树的锯齿形层序遍历1.题目链接2.算法原理详解3.代码实现 3.二叉树最大宽度1.题目链接2.算法原理详解3.代码实现 4.在每个树行中找最大值1.题目链接2.算法原理详解3.代码实现 1.N 叉树的层序遍历 1.题目链接 …

数据结构之链表深度讲解

小伙伴们&#xff0c;大家好呀&#xff0c;上次听我讲完顺序表想必收获不少吧&#xff0c;嘿嘿&#xff0c;这篇文章你也一样可以学到很多&#xff0c;系好安全带&#xff0c;咱们要发车了。 因为有了上一次顺序表的基础&#xff0c;所以这次我们直接进入正题&#xff0c;温馨…

Activiti7 开发快速入门【2024版】

记录开发最核心的部分&#xff0c;理论结合业务实操减少废话&#xff0c;从未接触工作流快速带入开发。假设你是后端的同学学过JAVA和流程图&#xff0c;则可以继续向后看&#xff0c;否则先把基础课程书准备好先翻翻。 为什么要工作流 比起直接使用状态字段&#xff0c;工作…

【 书生·浦语大模型实战营】作业(六):Lagent AgentLego 智能体应用搭建

【 书生浦语大模型实战营】作业&#xff08;六&#xff09;&#xff1a;Lagent & AgentLego 智能体应用搭建 &#x1f389;AI学习星球推荐&#xff1a; GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方…

【机器学习】集成方法---Boosting之AdaBoost

一、Boosting的介绍 1.1 集成学习的概念 1.1.1集成学习的定义 集成学习是一种通过组合多个学习器来完成学习任务的机器学习方法。它通过将多个单一模型&#xff08;也称为“基学习器”或“弱学习器”&#xff09;的输出结果进行集成&#xff0c;以获得比单一模型更好的泛化性…

上海计算机学会2021年1月月赛C++丙组T2康托表

题目背景 康托是一名数学家&#xff0c;他证明了一个重要的定理&#xff0c;需要使用一张表&#xff1a; 这个表的规律是&#xff1a; 从上到下&#xff1a;每一行的分子依次增大&#xff1b;从左到右&#xff1a;每一列的分母依次增大。 康托以一种不重复、不遗漏的方式&am…

【深耕 Python】Quantum Computing 量子计算机(1)图像绘制基础

一、绘制静止图像 使用matplotlib库绘制函数图像y sin(pi * x): import math import matplotlib.pyplot as pltx_min -2.0 x_max 2.0N 1000x1 [] y1 []for i in range(N 1):x x_min (x_max - x_min) * i / Ny math.sin(math.pi * x)x1.append(x)y1.append(y)plt.xl…

关于继承~

继承 动物有猫、狗&#xff0c; 猫又分为加菲猫、布偶猫......&#xff1b;狗又有哈士奇、德国牧羊犬...... 我们发现&#xff0c;下一类除了拥有上一类的共性之外&#xff0c;还拥有自己的特性。 于是我们可以利用继承的方式来减少重复的代码 继承的基本语法 class A:p…
最新文章