【文件操作与IO】详细解析文件操作与IO (一)

news2025/5/17 21:15:24

在这里插入图片描述

本篇博客给大家带来的是文件操作的知识点.
🐎文章专栏: JavaEE初阶
🚀若有问题 评论区见
欢迎大家点赞 评论 收藏 分享
如果你不知道分享给谁,那就分享给薯条.
你们的支持是我不断创作的动力 .

王子,公主请阅🚀

  • 要开心
    • 要快乐
      • 顺便进步
  • 一. 什么是文件
  • 二. Java操作文件
    • File类

要开心

要快乐

顺便进步

一. 什么是文件

1. 认识文件
先来认识狭义上的文件(file)。针对硬盘这种持久化存储的I/O设备,当我们想要进行数据保存时,
往往不是保存成一个整体,而是独立成一个个的单位进行保存,这个独立的单位就被抽象成文件的概念,就类似办公桌上的一份份真实的文件一般。
文件除了有数据内容之外,还有一部分信息,例如文件名、文件类型、文件大小等并不作为文件的数据而存在,我们把这部分信息可以视为文件的元信息。

在这里插入图片描述

2. 树型结构组织和目录
随着文件越来越多,对文件的系统管理也被提上了日程,如何进行文件的组织呢,一种合乎自然的想法出现了,就是按照层级结构进行组织,也就是我们数据结构中学习过的树形结构。这样,一种专门用来存放管理信息的特殊文件诞生了,也就是我们平时所谓文件夹(folder)或者目录(directory)的概念。
在这里插入图片描述
D盘下有目录11,目录11下又有图片,图片下还有…

3. 文件路径(Path)
在文件系统中如何定位我们的一个唯一的文件就成为当前要解决的问题,但这难不倒计算机科学家,因为从树型结构的角度来看,树中的每个结点都可以被一条从根开始,一直到达的结点的路径所描述,而这种描述方式就被称为文件的绝对路径(absolute path)。

在这里插入图片描述

除了可以从根开始进行路径的描述,我们可以从任意结点出发,进行路径的描述,而这种描述方式就被称为相对路径(relative path),相对于当前所在结点的一条路径。
在这里插入图片描述
相对路径需要先指定一个目录,作为基准目录,从基准目录出发,找到指定文件. 如果是命令行操作,基准目录,就是当前所处目录. 如果是图形化界面,基准目录就不好确定,对于IDEA来说,基准目录就是项目目录.
在这里插入图片描述

4. 其他知识
即使是普通文件,根据其保存数据的不同,也经常被分为不同的类型,我们一般简单的划分为文本文件和二进制文件,分别指代保存被字符集编码的文本和按照标准格式保存的非被字符集编码过的文件。

Windows 操作系统上,会按照文件名中的后缀来确定文件类型以及该类型文件的默认打开程序。但这个习俗并不是通用的,在 OSX、Unix、Linux 等操作系统上,就没有这样的习惯,一般不对文件类型做如此精确地分类。
在这里插入图片描述
文件由于被操作系统进行了管理,所以根据不同的用户,会赋予用户不同的对待该文件的权限,一般地可以认为有可读、可写、可执行权限。

Windows 操作系统上,还有一类文件比较特殊,就是平时我们看到的快捷方式(shortcut),这种文件只是对真实文件的⼀种引用而已。其他操作系统上也有类似的概念,例如,软链接(soft link)等.

最后,很多操作系统为了实现接口的统一性,将所有的 I/O 设备都抽象成了文件的概念,使用这一理念最为知名的就是 Unix、Linux 操作系统, 万物皆文件。

5. 很多文件都是二进制的,比如:.docx,pptx…等. 那如何判断一个文件是二进制文件还是文本文件
可以用记事本打开我们要判断的文件,如果打开之后乱码了,那就说明这个文件是二进制文件.否则就是文本文件.


二. Java操作文件

Java 中通过 java.io.File 类来对一个文件(包括目录)进行抽象的描述。注意,有 File 对象,并不代表真实存在该文件。

File类

Ⅰ常见属性
在这里插入图片描述
pathSeparator(\)是一个路径中,用来分割目录的符号.
如果当前系统是Windows,那么正斜杠(/)和反斜杠(\)都可以.一般首选用正斜杠(/).
如果是Linux或者Mac,那就用(\).

Ⅱ 构造方法
在这里插入图片描述
一个File对象就表示了一个硬盘文件,在构造对象的时候,就需要吧这个文件的路径给指定进来.(绝对/相对路径都是可以的). 文件名要包括后缀.

Ⅲ 方法
在这里插入图片描述
在这里插入图片描述

代码示例一: 获取目录

public class Demo1 {
    public static void main(String[] args) throws IOException {
        File file1 = new File("d:/test.txt");//如果要使用反斜杠\就得使用两个\\ 只使用一个\会出现语法错误
        System.out.println(file1.getParent());//获取父目录的文件路径.
        System.out.println(file1.getName());//获取文件名
        System.out.println(file1.getPath());//获取相对路径
        System.out.println(file1.getAbsoluteFile());//获取绝对路径
        System.out.println(file1.getCanonicalFile());//获取修饰过的绝对路径.

        System.out.println();
        File file2 = new File("./test.txt");//如果要使用反斜杠\就得使用两个\\ 只使用一个\会出现语法错误
        System.out.println(file2.getParent());//获取父目录的文件路径.
        System.out.println(file2.getName());//获取文件名
        System.out.println(file2.getPath());//获取相对路径
        System.out.println(file2.getAbsoluteFile());//将当前相对路径拼接到基准目录(项目目录)上.就得到了绝对路径.
        System.out.println(file2.getCanonicalFile());//获取修饰过的绝对路径.


    }
}

注意构造file对象时,如果使用反斜杠(\),要使用两个\\.

代码示例二: 创建新的文件并判断文件类型

public class Demo2 {
    public static void main(String[] args) throws IOException {
        File file = new File("d:/test.txt");
        System.out.println(file.exists());//判断文件是否存在
        System.out.println(file.isDirectory());//判断文件是否是一个目录
        System.out.println(file.isFile());//判断是否是普通文件

        boolean check = file.createNewFile();
        System.out.println("check = "+check);
        System.out.println(file.exists());
        System.out.println(file.isDirectory());
        System.out.println(file.isFile());
    }
}

代码示例三: 删除文件

public class Demo3 {
    public static void main(String[] args) throws InterruptedException {
        File file = new File("d:/test.txt");
        //file.delete();//立刻删除.
        file.deleteOnExit();//进程结束后删除.
        Thread.sleep(5000);
        System.out.println("进程结束");
    }
}

deleteOnExit()方法表示进程结束后再删除文件. 就好像在WPS中编辑一个文件的时候,就会自动产生一个隐藏文件,当关闭文件的时候隐藏文件自动删除.通过这样的隐藏文件,就可以告诉 WPS,上一次关闭是正常关闭,还是异常关闭,如果电脑突然关机,就可以恢复出之前正在编辑的内容.

代码示例四: 遍历目录下的文件名

public class Demo4 {
    public static void main(String[] args) {
        File f = new File("d:/");
        String[] file = f.list();
        System.out.println(Arrays.toString(file));
    }
}

在这里插入图片描述
如果我直接打印file,会出现上述@…,那么问题来了,这串东西是不是地址?

注意,这串东西不是地址,而是通过调用hashCode方法返回的哈希值.
Java代码中是没有任何方法能获取到"内存地址"的,要想拿到地址,只能靠native方法进入JVM内部,通过C++ 代码获取到.

代码示例5: 创建目录

public class Demo5 {
    public static void main(String[] args) {
//        File f = new File("d:/java109");
//        boolean ret = f.mkdir();//创建一个目录
//        System.out.println("ret = " + ret);//true

//        File f = new File("d:/java109/aaa/bbb/ccc");
//        boolean ret = f.mkdir();//创建一个目录
//        System.out.println("ret = " + ret);//false
        //创建多级目录得用mkdirs()方法
        File f = new File("d:/java109/aaa/bbb/ccc");
        boolean ret = f.mkdirs();//创建一个目录
        System.out.println("ret = " + ret);
    }
}

代码示例6: 文件重命名

public class Demo6 {
    public static void main(String[] args) {
        File srcFile = new File("d:/test.txt");
        File destFile = new File("d:/test2.txt");
        boolean ret = srcFile.renameTo(destFile);
        System.out.println("ret = "+ret);
    }
}





本篇博客到这里就结束啦, 感谢观看 ❤❤❤

🐎期待与你的下一次相遇😊😊😊

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

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

相关文章

PMP考试费能报销吗?报销流程是什么?

最近也是到了6月和8月PMP考试的报名高峰期,后台有小伙伴最常问的问题就是,PMP考试费比较贵,能不能报销?报销流程是什么? 先给大家分享一下最新PMP报名消息和考试信息: 添加图片注释,不超过 140…

学习threejs,使用EffectComposer后期处理组合器(采用RenderPass、GlitchPass渲染通道)

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.EffectComposer 后期…

docker部署springboot(eureka server)项目

打jar包 使用maven&#xff1a; <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>17</source><target>17&…

第 7 期:DDPM 采样提速方案:从 DDPM 到 DDIM

本期关键词:采样加速、DDIM 推导、可控性提升、伪逆过程、代码实战 前情回顾:DDPM 的采样瓶颈 在前几期中,我们构建了一个完整的 DDPM 生成流程。但是你可能已经发现: 生成一张图像太慢了!!! 原因是: DDPM 要在 T 个时间步中一步步地去噪,从 x_T → x_0。而通常 T 至…

1panel第三方应用商店(本地商店)配置和使用

文章目录 引言资源网站实战操作说明 引言 1Panel 提供了一个应用提交开发环境&#xff0c;开发者可以通过提交应用的方式将自己的应用推送到 1Panel 的应用商店中&#xff0c;供其他用户使用。由此衍生了一种本地应用商店的概念&#xff0c;用户可以自行编写应用配置并上传到自…

七牛使用任务工作流对音频进行转码

最近工作中有对音频转码的需求&#xff0c;比如 iOS 设备中对 ogg 格式的语音支持力度不够&#xff0c;那么可以讲ogg转码成mp3格式,下面来介绍一下&#xff0c;如果通过七牛&#xff0c;后端自行转码&#xff0c;不需要前端做任何事情。 假设我们存在一个音频的 url&#xff…

基于springBoot+vue的PC 端学习系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 随着我国经济的高速发展与人们生活水平的日益提高&#xff0c;人们对生活质量的追求也多种多样。尤其在人们生活节奏不断加快的当下&#xff0c;人们更趋向于足不出户解决生活上的问题&#xff0c;线上管理系统展现了其蓬勃生命力和广阔的前景。与此同时&#xff0c;在疫…

【Python爬虫基础篇】--1.基础概念

目录 1.爬虫--定义 2.爬虫--组成 3.爬虫--URL 1.爬虫--定义 网络爬虫&#xff0c;是一种按照一定规则&#xff0c;自动抓取互联网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。随着网络的迅速发展&#xff0c;万维网成为大量信息的载体…

CSS进度条带斑马纹动画(有效果图)

效果图 .wxml <view class"tb"><view class"tb-line" style"transform:translateX({{w%}})" /> </view> <button bind:tap"updateLine">增加进度</button>.js Page({data: {w:0,},updateLine(){this.…

HarmonyOS:使用Refresh组件实现页面下拉刷新上拉加载更多

一、前言 可以进行页面下拉操作并显示刷新动效的容器组件。 说明 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。该组件从API Version 12开始支持与垂直滚动的Swiper和Web的联动。当Swiper设置loop属性为true时&…

【C++深入系列】:模版详解(上)

&#x1f525; 本文专栏&#xff1a;c &#x1f338;作者主页&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客励志语录&#xff1a; 你不需要很厉害才能开始&#xff0c;但你需要开始才能很厉害。 ★★★ 本文前置知识&#xff1a; 类和对象&#xff08;上&#xff09; …

leetcode刷题日记——同构字符串

[ 题目描述 ]&#xff1a; [ 思路 ]&#xff1a; 题目要求判断 s 和 t 是否为同构字符串&#xff0c;即 s 中每个字符与 t 中对应位置的字符形成一个映射关系&#xff0c;且只能是一对一映射ASCII&#xff08;American Standard Code for Information Interchange&#xff09…

HTTP/1.1 队头堵塞问题

文章目录 一、队头堵塞1、非管线化2、管线化 二、如何解决&#xff1f; 一、队头堵塞 1、非管线化 如图&#xff0c;http 请求必须等到上一个请求响应后才能发送&#xff0c;后面的以此类推&#xff0c;由此可以看出&#xff0c;在一个 tcp 通道中&#xff0c;如果某个 http 请…

【Quest开发】在虚拟世界设置具有遮挡关系的透视窗口

软件&#xff1a;Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72 硬件&#xff1a;Meta Quest3 仅针对urp管线 参考了YY老师这篇&#xff0c;可以先看他的再看这个可能更好理解一些&#xff1a;Unity Meta Quest MR 开发&#xff08;七&#xff09;&#xff1a;使…

常用 Git 命令详解

Git 是一个强大的版本控制工具&#xff0c;广泛用于软件开发和团队协作中。掌握 Git 命令可以帮助开发者更高效地管理代码版本和项目进度。本文将介绍一些常用的 Git 命令&#xff0c;并提供示例以帮助你更好地理解和应用这些命令。 目录 常用命令 git clonegit stashgit pul…

java导出word含表格并且带图片

背景 我们需要通过 Java 动态导出 Word 文档&#xff0c;基于预定义的 模板文件&#xff08;如 .docx 格式&#xff09;。模板中包含 表格&#xff0c;程序需要完成以下操作&#xff1a; 替换模板中的文本&#xff08;如占位符 ${设备类型} 等&#xff09;。 替换模板中的图…

基于CNN卷积神经网络和GEI步态能量提取的视频人物步态识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 GEI步态能量提取 4.2 CNN卷积神经网络原理 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2024b/matlab2022a 3.部分核心程序 &…

算法思想之链表

欢迎拜访&#xff1a;雾里看山-CSDN博客 本篇主题&#xff1a;算法思想之链表 发布时间&#xff1a;2025.4.18 隶属专栏&#xff1a;算法 目录 算法介绍常用技巧 例题两数相加题目链接题目描述算法思路代码实现 两两交换链表中的节点题目链接题目描述算法思路代码实现 重排链表…

Oceanbase单机版上手示例

本月初Oceanbase单机版发布&#xff0c;作为一个以分布式起家的数据库&#xff0c;原来一个集群动辄小十台机器&#xff0c;多着十几台几十台甚至更多&#xff0c;Oceanbase单机版的发布确实大大降低了硬件部署的门槛。 1.下载安装介质 https://www.oceanbase.com/softwarece…

架构师面试(三十二):注册中心数据结构

问题 提到【注册中心】&#xff0c;我们对它的基本功能&#xff0c;肯定可以顺手拈来&#xff0c;比如&#xff1a;【服务注册】【服务发现】【健康检查】【变更通知】等。 透过这些基本功能&#xff0c;一个普适的注册中心的数据结构应该如何设计呢&#xff1f; 可以结合着…