【编程必备知识】文件操作

news2024/11/19 20:16:20

文章目录

  • 前言
  • 1. 认识文件
    • 1.1 树型结构组织和目录
    • 1.2 文件路径
      • 1.2.1 绝对路径
      • 1.2.2 相对路径
    • 1.3 文件类型
  • 2. Java 中操作文件
    • 2.1 File 概述
      • 2.1.1 构造方法
      • 2.1.2 成员方法
    • 2. 2 代码示例
      • 示例1: 观察 get 系列的特点和差异
      • 示例2: 普通文件的创建
      • 示例3: 普通文件的删除
      • 示例4: 观察 deleteOnExit 的现象
      • 示例5: 观察目录的创建
      • 示例6: 观察多层目录的创建
      • 示例7: 观察文件重命名
  • 总结


前言

本文要讲述的我们在计算机中经常见到的一个东西 ---- 文件, 在不同的文件系统中, 管理文件的方式其实都是类似的, 本文将带领读者认识文件, 利用 Java 操作文件.

关注收藏, 开始学习吧🧐


1. 认识文件

我们先来认识狭义上的文件(file)。针对硬盘这种持久化存储的I/O设备,当我们想要进行数据保存时,往往不是保存成一个整体,而是独立成一个个的单位进行保存,这个独立的单位就被抽象成文件的概念,就类似办公桌上的一份份真实的文件一般。
在这里插入图片描述

文件除了有数据内容之外,还有一部分信息,例如文件名、文件类型、文件大小等并不作为文件的数据而存在,我们把这部分信息可以视为文件的元信息。

在这里插入图片描述

1.1 树型结构组织和目录

随着文件越来越多, 对文件的系统管理也被提上了日程. 在不同的文件系统下, 对于文件的操作都是大致相同的, 通过层级结构进行组织, 用 “目录 - 目录 - 目录 - 文件” 这种形式构成了 “N叉树” 数据结构, 这也就是我们平时所谓文件夹 (folder) 或者目录 (directory) 的概念.

在这里插入图片描述

1.2 文件路径

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

除了可以从根开始进行路径的描述,我们可以从任意结点出发,进行路径的描述,而这种描述方式就被称为相对路径(relative path),相对于当前所在结点的一条路径。

1.2.1 绝对路径

以盘符为开头的路径, 就是绝对路径. 绝对路径相当于从 “此电脑” 出发, 然后去找文件的过程.

绝对路径大致格式:

C:/temp/test1.txt 表示在 C 盘下, temp 目录中一个名为 test1 的 .txt 文件.

1.2.2 相对路径

以 . 或者 … 开头的路径, 就是相对路径. ./ 表示当前所在目录, ../ 表示当前所在目录的上层目录. 相对路径需要有一个 “基准目录”, 表示从这个基准目录出发, 然后去找文件的过程.

相对路径大致格式:

./temp/test1.txt 如果以 C: 为基准目录, 这表示寻找 test1.txt 的过程.
../test1.txt 是表示如果以 C:/temp/111 为基准目录, 从 111 的上层目录中 temp 中寻找 text1.txt.

1.3 文件类型

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

文本文件存储的是字符, 二进制文件存储的是二进制数据. 一个最简单的方式来判断文件是二进制还是文本, 就是直接使用记事本打开文件. 如果打开后能看懂, 那就是文本文件, 看不懂, 就是二进制文件. 记事本打开文件, 就是尝试把当前的数据在码表中进行查询.

请大家掌握判断文件的方法, 因为后续我们使用 Java 操作文件时, 两种文本的操作方式是不同的.

2. Java 中操作文件

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

通过 File 对象来描述一个具体的文件, File 对象也可以对应到一个真实存在的文件, 也可以对应到一个不存在的文件.

2.1 File 概述

我们先来看一看 Java 中 File 类中常见的一些方法.

2.1.1 构造方法

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

此处参数的字符串, 就表示一个路径, 可以是文件的绝对路径, 也可以是从当前工作目录出发的相对路径.

2.1.2 成员方法

修饰符及返回值类型方法签名说明
StringgetParent()返回 File 对象的父目录文件路径
StringgetName()返回 FIle 对象的纯文件名称
StringgetPath()返回 File 对象的文件路径
StringgetAbsolutePath()返回 File 对象的绝对路径
StringgetCanonicalPath()返回 File 对象的修饰过的绝对路径
booleanexists()判断 File 对象描述的文件是否真实存在
booleanisDirectory()判断 File 对象代表的文件是否是一个目录
booleanisFile()判断 File 对象代表的文件是否是一个普通文件
booleancreateNewFile()根据 File 对象,自动创建一个空文件。成功创建后返回 true
booleandelete()根据 File 对象,删除该文件。成功删除后返回 true
voiddeleteOnExit()根据 File 对象,标注文件将被删除,删除动作会到JVM 运行结束时才会进行
String[]list()返回 File 对象代表的目录下的所有文件名
File[]listFiles()返回 File 对象代表的目录下的所有文件,以 File 对象表示
booleanmkdir()创建 File 对象代表的目录
booleanmkdirs()创建 File 对象代表的目录,如果必要,会创建中间目录
booleanrenameTo(Filedest)进行文件改名,也可以视为我们平时的剪切、粘贴操作
booleancanRead()判断用户是否对文件有可读权限
booleancanWrite()判断用户是否对文件有可写权限

2. 2 代码示例

示例1: 观察 get 系列的特点和差异

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

public class Test1 {
    public static void main(String[] args) throws IOException {
        File file = new File("../test1.txt");

        System.out.println(file.getParent());
        System.out.println(file.getName());
        System.out.println(file.getPath());
        System.out.println(file.getAbsolutePath());
        System.out.println(file.getCanonicalPath());
    }
}

运行结果

在这里插入图片描述

示例2: 普通文件的创建

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

public class Test2 {
    public static void main(String[] args) throws IOException {
        // 要求该文件不存在, 才能看到同样的现象
        File file = new File("test2.txt");

        System.out.println(file.exists());
        System.out.println(file.isDirectory());
        System.out.println(file.isFile());
        System.out.println(file.createNewFile());
        System.out.println(file.exists());
        System.out.println(file.isDirectory());
        System.out.println(file.isFile());
        System.out.println(file.createNewFile());
    }
}

运行结果

在这里插入图片描述

示例3: 普通文件的删除

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

public class Test3 {
    public static void main(String[] args) throws IOException {
    	// 要求该文件不存在, 才能看到同样的现象
        File file = new File("test3.txt");

        System.out.println(file.exists());
        System.out.println(file.createNewFile());
        System.out.println(file.exists());
        System.out.println(file.delete());
        System.out.println(file.exists());
    }
}

运行结果

在这里插入图片描述

示例4: 观察 deleteOnExit 的现象

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

public class Test4 {
    public static void main(String[] args) throws IOException {
        // 要求该文件不存在, 才能看到同样的现象
        File file = new File("test4.txt");

        System.out.println(file.exists());
        System.out.println(file.createNewFile());
        System.out.println(file.exists());
        file.deleteOnExit();
        System.out.println(file.exists());
    }
}

运行结果

在这里插入图片描述

示例5: 观察目录的创建

import java.io.File;

public class Test5 {
    public static void main(String[] args) {
        // 要求该目录不存在, 才能看到同样的现象
        File dir = new File("testDir");

        System.out.println(dir.isDirectory());
        System.out.println(dir.isFile());
        System.out.println(dir.mkdir());
        System.out.println(dir.isDirectory());
        System.out.println(dir.isFile());
    }
}

运行结果

在这里插入图片描述

示例6: 观察多层目录的创建

import java.io.File;

public class Test6 {
    public static void main(String[] args) {
        File dir = new File("parentDir/childDir");

        System.out.println(dir.isDirectory());
        System.out.println(dir.isFile());
        System.out.println(dir.mkdir());
        System.out.println(dir.isDirectory());
        System.out.println(dir.isFile());
        System.out.println(dir.mkdirs());
        System.out.println(dir.isDirectory());
        System.out.println(dir.isFile());
    }
}

运行结果

在这里插入图片描述
可以看到, 当使用 mkdir() 创建多层目录的时候,如果中间目录不存在,则无法创建成功; 但是 mkdirs() 就可以解决这个问题。

示例7: 观察文件重命名

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

public class Test7 {
    public static void main(String[] args) throws IOException {
        File srcFile = new File("srcFile.txt");
        srcFile.createNewFile();

        File dstFile = new File("dstFile.txt");

        System.out.println(srcFile.exists());
        System.out.println(dstFile.exists());
        System.out.println(srcFile.renameTo(dstFile));
        System.out.println(srcFile.exists());
        System.out.println(dstFile.exists());
    }
}

运行结果

在这里插入图片描述

以上对文件系统的操作, 都是基于 File 类来实现的, 下篇文章还会学习对文件内容的读写操作.

总结

✨ 本文主要讲述了文件的概念, 还学习了如何使用 Java 来操作文件. 下篇文章我们还会继续探讨对文件内容的读写操作, 两个数据流.
✨ 想了解更多知识, 请持续关注博主, 本人会不断更新学习记录, 跟随我一起不断学习.
✨ 感谢你们的耐心阅读, 博主本人也是一名学生, 也还有需要很多学习的东西. 写这篇文章是以本人所学内容为基础, 日后也会不断更新自己的学习记录, 我们一起努力进步, 变得优秀, 小小菜鸟, 也能有大大梦想, 关注我, 一起学习.

再次感谢你们的阅读, 你们的鼓励是我创作的最大动力!!!!!

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

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

相关文章

手写Spring系列【一】IOC的简单实现笔记

前言: 👏作者简介:我是笑霸final,一名热爱技术的在校学生。 📝个人主页:个人主页1 || 笑霸final的主页2 📕系列专栏:项目专栏 📧如果文章知识点有错误的地方,…

uni-app:文本超出部分用省略号表示

效果 前 后 核心代码 white-space: nowrap; /* 强制不换行 */ text-overflow: ellipsis; /* 超过部分省略号代替 */ overflow: hidden; /* 必须同时设置overflow:hidden才能生效 */ 完整代码 <template><view><view class"all_style"><view c…

「才得吹嘘身渐稳」,也来谈谈大模型

要问2023年的科技领域什么消息最博人眼球&#xff0c;那么22年底发布、23年迅速跻身顶流的ChatGPT一定占有一席之地。随着ChatGPT的“爆火出圈”&#xff0c;国内外大厂纷纷布局「生成式语言模型」研发赛道&#xff0c;各类应用也如雨后春笋般层出不穷&#xff0c;让人眼花缭乱…

SpringBoot的配置文件——.yml和.properties

目录 1. Spring Boot 配置文件的使用场景 2. 配置文件的两种格式 2.0 特殊说明&#xff1a; 2.1 .properties 2.1.1 格式 2.2.2 缺陷 2.2.3 解决中文乱码的问题 2.2 .yml 2.2.3 格式 配置数据库连接 注意转义字符 ​编辑 ​编辑 配置null 配置对象 从.yml读取文件举例 Stud…

v-on/@ 事件处理指令修饰符-stop、prevent、once

v-on/事件修饰符&#xff1a; 一、.stop 阻止单机事件继续传播 event.stopProgagetion() eg: <h3>事件修饰符</h3> <div click"todo"> <div click.stop"doThis"> 单机事件会继续传递 </div> </div> 点击 单机事…

【Java 进阶篇】Java Web 编写注册页面案例

当涉及到创建一个Java Web注册页面时&#xff0c;你将需要涵盖很多不同的主题&#xff0c;包括HTML、CSS、Java Servlet和数据库连接。在这篇文章中&#xff0c;我们将详细介绍每个步骤&#xff0c;以帮助你创建一个完整的注册页面。 1. 介绍 注册页面是许多Web应用程序的关键…

STM32标准库代码转为LL库代码-详解

概述 由于标准库&#xff0c;ST公司逐步不再维护&#xff0c;比较老旧的项目&#xff0c;都是使用标准库来开发&#xff0c;如果想使用LL库&#xff0c;需要借助《SPL2LL转换器》实现。 1、LL库简介 LL库&#xff0c;即STM32Cube Low-Layer&#xff0c;也叫Cube LL、Cube底层…

文件上传 [极客大挑战 2019]Upload 1

题目来源&#xff1a;buuctf [极客大挑战 2019]Upload 1 打开题目 是一道文件上传题 我们上传png和jpg格式的一句话木马上去看看 上传失败了&#xff0c;应该是在后端也对我们的文件内容进行了检测&#xff0c;检测到我们的一句话木马里面包含<? 那我们重新换个一句话木…

【软件工程】常见软件过程模型及其优缺点

软件过程模型 1. 瀑布模型2. V模型3. 原型模型4. 增量模型5. 螺旋模型6. 喷泉模型 1. 瀑布模型 描述&#xff1a; 瀑布模型是将软件开发划分为不同的阶段&#xff0c;只有上一个阶段完成了才能进入到下一个阶段&#xff0c;也就是按照需求分析、设计、实现、测试、运行和维护这…

UML类图是什么?怎么画?

在软件开发和系统设计领域&#xff0c;UML&#xff08;Unified Modeling Language&#xff09;类图是一种强大的工具&#xff0c;用于可视化和表示软件系统的结构和关系。如果你曾经在软件开发中遇到过“UML类图是什么&#xff1f;”这个问题&#xff0c;那么你来对地方了。本文…

简要归纳UE5 Lumen全局光照原理

一、Jim kajiya老爷子的渲染方程&#xff1a; 求全局光照就是求解渲染方程&#xff0c;我们将两边都有未知数的渲染方程变换成离散形式&#xff1a; 更形象的描述这个离散的渲染方程&#xff1a; 要给每个三角形着色就得先判断光线有没有和它相交&#xff0c;以下是求光线和三…

3D 生成重建006-3DFuse 形状引导一致性的文生3d的方法

3D生成重建006-3DFuse 形状引导一致性的文生3d的方法 文章目录 0 论文介绍1 论文方法1.1 semantic code1.2 稀疏深度信息PointE1.3 lora部分 2 效果 0 论文介绍 在004-DreamFusion and SJC 中dreamfusion提到将2D观测结果“提升”到3D世界的任务本质上是模糊的&#xff0c;并…

1810_spacemacs缺少evil-unimpaired以及evil-ediff安装失败解决

全部学习汇总&#xff1a; GreyZhang/editors_skills: Summary for some common editor skills I used. (github.com) 安装的时候遇到evil-unimpaired找不到的问题&#xff0c;查了一下网络上很多人都遇到这样的问题&#xff0c;但是问题千奇八怪。更要命的可能是我遇到的提示跟…

【ARM AMBA5 CHI 入门 12.1 -- CHI 链路层详细介绍 】

文章目录 CHI 版本介绍1.1 CHI 链路层介绍1.1.1 Flit 切片介绍1.1.2 link layer credit(L-Credit)机制1.1.3 Channel1.1.4 Port1.1. RN Node 接口定义1.1.6 SN Node 接口定义1.2 Channel interface signals1.2.1 Request, REQ, channel1.2.2 Response, RSP, channel1.2.3 Snoop…

一个完整的初学者指南Django-part2

介绍 欢迎来到 Django 教程的第二部分&#xff01;在上一课中&#xff0c;我们安装了项目所需要的一切软件&#xff0c;希望你们在学习这篇文章之前&#xff0c;安装了 Python 3.6&#xff0c;并且在虚拟环境中运行Django 1.11。因为&#xff0c;在本篇文章中&#xff0c;我们…

并购交易:埃克森美孚商谈以250美元/股的价格收购先锋自然资源

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;埃克森美孚(XOM)正在商谈以250美元/股的价格收购先锋自然资源(PXD)。 彭博社援引知情人士的消息报道称&#xff0c;一项全股票交易最早可能于周三宣布。按照每股250美元的价格计算&#xff0c;先锋…

【动态规划】198. 打家劫舍、213. 打家劫舍 II、337. 打家劫舍 III

提示&#xff1a;努力生活&#xff0c;开心、快乐的一天 文章目录 198. 打家劫舍&#x1f4a1;解题思路&#x1f914;遇到的问题&#x1f4bb;代码实现&#x1f3af;题目总结 213. 打家劫舍 II&#x1f4a1;解题思路&#x1f914;遇到的问题&#x1f4bb;代码实现&#x1f3af;…

postman发送POST请求,模拟请求头界面的响应信息

postman发送POST请求 示例&#xff1a;微信公众平台创建用户标签接口&#xff0c;业务操作如下&#xff1a; 1、打开微信公众平台&#xff0c;微信扫码登录&#xff1a;https://mp.weixin.qq.com/debug/cgi-bin/sandbox?tsandbox/login 同时&#xff0c;我也为大家准备了一份…

求二叉树节点的个数——后序遍历

之前我们已经学习了二叉树前中后序的遍历&#xff0c;在次基础上我们利用遍历来求二叉树的节点个数 利用变量来计数&#xff1a; int BinaryTreeSize(BTNode* root) {int size 0;if (root NULL){return 0;}else{size;}BinaryTreeSize(root->left);BinaryTreeSize(root-&…

Spring5应用之事务属性

作者简介&#xff1a;☕️大家好&#xff0c;我是Aomsir&#xff0c;一个爱折腾的开发者&#xff01; 个人主页&#xff1a;Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏&#xff1a;Spring5应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言事务…