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

本篇博客给大家带来的是文件操作的知识点.
🐎文章专栏: 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);}
}
本篇博客到这里就结束啦, 感谢观看 ❤❤❤
🐎期待与你的下一次相遇😊😊😊
相关文章:
【文件操作与IO】详细解析文件操作与IO (一)
本篇博客给大家带来的是文件操作的知识点. 🐎文章专栏: JavaEE初阶 🚀若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅🚀 要开心要快乐顺便进步 一. …...
PMP考试费能报销吗?报销流程是什么?
最近也是到了6月和8月PMP考试的报名高峰期,后台有小伙伴最常问的问题就是,PMP考试费比较贵,能不能报销?报销流程是什么? 先给大家分享一下最新PMP报名消息和考试信息: 添加图片注释,不超过 140…...
机器学习05-CNN
CNN(卷积神经网络)学习文档 一、引言 卷积神经网络(Convolutional Neural Network,CNN)是深度学习中的一种重要网络结构,在图像识别、计算机视觉等领域取得了巨大成功。CNN 的设计灵感来源于生物视觉系统…...
c++ string构造函数和assign函数
c string构造函数和assign函数 #include <iostream> #include <stdlib.h> #include <string> #include <string.h>int main() {char buff[10] {a,b,c,d,e,f,g,h,i,\0};std::string str1;str1.assign(&buff[0],0,10);int length str1.length();i…...
学习threejs,使用EffectComposer后期处理组合器(采用RenderPass、GlitchPass渲染通道)
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.EffectComposer 后期…...
物联网通信协议——TCP与MQTT的对比
在物联网通信中,MQTT和TCP的实现方式和原理完全不同,因为两者属于协议栈的不同层级,解决的问题也不同。以下从协议层级、工作机制和典型场景三个角度详细解释: 1. 协议层级与定位 特性TCPMQTT协议层级传输层(第4层&am…...
docker部署springboot(eureka server)项目
打jar包 使用maven: <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 提供了一个应用提交开发环境,开发者可以通过提交应用的方式将自己的应用推送到 1Panel 的应用商店中,供其他用户使用。由此衍生了一种本地应用商店的概念,用户可以自行编写应用配置并上传到自…...
Docker Image export and load and tag
# 在国外服务器保存Docker镜像 docker save myimage > myimage.tar # 将tar文件传输到国内服务器 scp myimage.tar root192.0.2.0:/home # 在国内服务器加载Docker镜像 cd /home docker load < myimage.tar # 查看镜像 docker images #docker 镜像名 tag 为none 的解决方…...
七牛使用任务工作流对音频进行转码
最近工作中有对音频转码的需求,比如 iOS 设备中对 ogg 格式的语音支持力度不够,那么可以讲ogg转码成mp3格式,下面来介绍一下,如果通过七牛,后端自行转码,不需要前端做任何事情。 假设我们存在一个音频的 urlÿ…...
Excel提取图片并自动上传到文件服务器(OOS),获取文件链接
Excel提取图片并自动上传到接口 在实际项目中,我们可能经常会遇到需要批量从Excel文件(.xlsx)中提取图片并上传到特定接口的场景。今天,我就详细介绍一下如何使用Python实现这一功能,本文会手把手教你搭建一个完整的解…...
基于springBoot+vue的PC 端学习系统(源码+lw+部署文档+讲解),源码可白嫖!
摘要 随着我国经济的高速发展与人们生活水平的日益提高,人们对生活质量的追求也多种多样。尤其在人们生活节奏不断加快的当下,人们更趋向于足不出户解决生活上的问题,线上管理系统展现了其蓬勃生命力和广阔的前景。与此同时,在疫…...
JVM对象创建全过程
JVM对象创建全过程深度解析 1. 对象创建的整体流程 JVM创建对象的过程可以分为7个关键步骤,从类检查到内存分配,再到对象初始化: 类加载检查 → 内存分配 → 内存空间初始化 → 对象头设置 → 构造函数执行 → 栈帧引用建立 → 对象使用2.…...
Spring Boot 核心注解全解:@SpringBootApplication背后的三剑客
大家好呀!👋 今天我们要聊一个超级重要的Spring Boot话题 - 那个神奇的主类注解SpringBootApplication!很多小伙伴可能每天都在用Spring Boot开发项目,但你真的了解这个注解背后的秘密吗?🤔 别担心&#x…...
【Python爬虫基础篇】--1.基础概念
目录 1.爬虫--定义 2.爬虫--组成 3.爬虫--URL 1.爬虫--定义 网络爬虫,是一种按照一定规则,自动抓取互联网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。随着网络的迅速发展,万维网成为大量信息的载体…...
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.…...
文件二进制读写和文本读写以及编码解码
假如是utf8编码,windows系统 写:往键盘中写的字符会被utf8编码成字节写入文件。假如是文本写,\n会被替换为\r\n写入,结尾会加文件结束符EOF。假如是二进制写,\n就是\n,文件结尾也不会加什么EOF 读ÿ…...
HarmonyOS:使用Refresh组件实现页面下拉刷新上拉加载更多
一、前言 可以进行页面下拉操作并显示刷新动效的容器组件。 说明 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。该组件从API Version 12开始支持与垂直滚动的Swiper和Web的联动。当Swiper设置loop属性为true时&…...
获取印度股票市场列表、查询IPO信息以及通过WebSocket实时接收数据
为了对接印度股票市场,获取市场列表、查询IPO信息、查看涨跌排行榜以及通过WebSocket实时接收数据等步骤。 1. 获取市场列表 首先,您需要获取支持的市场列表,这有助于了解哪些市场可以交易或监控。 请求方法:GETURL:…...
【C++深入系列】:模版详解(上)
🔥 本文专栏:c 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录: 你不需要很厉害才能开始,但你需要开始才能很厉害。 ★★★ 本文前置知识: 类和对象(上) …...
leetcode刷题日记——同构字符串
[ 题目描述 ]: [ 思路 ]: 题目要求判断 s 和 t 是否为同构字符串,即 s 中每个字符与 t 中对应位置的字符形成一个映射关系,且只能是一对一映射ASCII(American Standard Code for Information Interchange)…...
HTTP/1.1 队头堵塞问题
文章目录 一、队头堵塞1、非管线化2、管线化 二、如何解决? 一、队头堵塞 1、非管线化 如图,http 请求必须等到上一个请求响应后才能发送,后面的以此类推,由此可以看出,在一个 tcp 通道中,如果某个 http 请…...
【Quest开发】在虚拟世界设置具有遮挡关系的透视窗口
软件:Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72 硬件:Meta Quest3 仅针对urp管线 参考了YY老师这篇,可以先看他的再看这个可能更好理解一些:Unity Meta Quest MR 开发(七):使…...
Qt界面卡住变慢的解决方法
本质原因: 当Qt界面出现卡顿或无响应时,通常是因为主线程(GUI线程)被耗时操作阻塞。 完全忘了。。。 Qt Creater解决方法 1. 定位耗时操作 目标:找到阻塞主线程的代码段。 方法: 使用QElapsedTimer测量代码执行时间…...
常用 Git 命令详解
Git 是一个强大的版本控制工具,广泛用于软件开发和团队协作中。掌握 Git 命令可以帮助开发者更高效地管理代码版本和项目进度。本文将介绍一些常用的 Git 命令,并提供示例以帮助你更好地理解和应用这些命令。 目录 常用命令 git clonegit stashgit pul…...
java导出word含表格并且带图片
背景 我们需要通过 Java 动态导出 Word 文档,基于预定义的 模板文件(如 .docx 格式)。模板中包含 表格,程序需要完成以下操作: 替换模板中的文本(如占位符 ${设备类型} 等)。 替换模板中的图…...
基于CNN卷积神经网络和GEI步态能量提取的视频人物步态识别算法matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 GEI步态能量提取 4.2 CNN卷积神经网络原理 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2024b/matlab2022a 3.部分核心程序 &…...
【Pandas】pandas DataFrame isin
Pandas2.2 DataFrame Indexing, iteration 方法描述DataFrame.head([n])用于返回 DataFrame 的前几行DataFrame.at快速访问和修改 DataFrame 中单个值的方法DataFrame.iat快速访问和修改 DataFrame 中单个值的方法DataFrame.loc用于基于标签(行标签和列标签&#…...
算法思想之链表
欢迎拜访:雾里看山-CSDN博客 本篇主题:算法思想之链表 发布时间:2025.4.18 隶属专栏:算法 目录 算法介绍常用技巧 例题两数相加题目链接题目描述算法思路代码实现 两两交换链表中的节点题目链接题目描述算法思路代码实现 重排链表…...
