认识文件、文件路径、File类

news2024/11/23 12:40:31

认识文件、文件路径、File类

  • 一、认识文件
    • 1.1 狭义与广义
    • 1.2 树型结构组织和目录
    • 1.3 其他相关知识
  • 二、文件路径 (Path)
  • 三、File类
    • 3.1 构造方法
    • 3.2 文件元信息操作方法
    • 3.3 代码示例

一、认识文件

1.1 狭义与广义

狭义的文件:
存储在硬盘上的数据,以"文件"为单位进行组织,常见的就是普通的文件 (文本文件、图片、office系列、视频、音频、可执行程序…)。
文件夹也叫做"目录",也是一种特殊的文件!!!

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

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

广义的文件:
很多操作系统为了实现接口的统一性,将所有的 I/O 设备都抽象成了文件的概念,使用这一理念最为知名的就是 Unix、Linux 操作系统。操作系统要负责管理软硬件资源,因此往往会把这些资源都统一抽象成"文件"来进行管理~~ 即"—切皆文件"!!!

比如:有一个网卡,就把网卡这个设备抽象成一个文件,创建了特殊的文件表示网卡,从网卡接收数据就是读这个文件,往网卡里发送数据就是写这个文件比如;有一个键盘,想从键盘读取数据也是把键盘抽象成一个文件(stdin),读这个文件就能读到用户输入的按键内容了。

本篇讨论的文件还是指狭义的文件~~

1.2 树型结构组织和目录

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

1.3 其他相关知识

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

Windows 操作系统上,会按照文件名中的后缀来确定文件类型以及该类型文件的默认打开程序。但这个习俗并不是通用的,在 OSX、Unix、Linux 等操作系统上,就没有这样的习惯,一般不对文件类型做如此精确地分类。
在这里插入图片描述

文件由于被操作系统进行了管理,所以根据不同的用户,会赋予用户不同的对待该文件的权限,一般地可以认为有可读、可写、可执行权限。
在这里插入图片描述

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

二、文件路径 (Path)

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

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

目录之间的分隔符,可以使用(反斜杠)也可以使用/(斜杠)~~

三、File类

Java 中通过java.io.File类来对一个文件(包括目录)进行抽象的描述。

注意:有 File 对象,并不代表真实存在该文件。

3.1 构造方法

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

3.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(File dest)进行文件改名,也可以视为我们平时的剪切、粘贴操作
booleancanRead()判断用户是否对文件有可读权限
booleancanWrite()判断用户是否对文件有可写权限

3.3 代码示例

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

import java.io.File;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException {
        File file = new File("../hello-world.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());
    }
}

运行结果:

..
hello-world.txt
..\hello-world.txt
D:\代码练习\文件示例1\..\hello-world.txt
D:\代码练习\hello-world.txt

示例2:普通文件的创建、删除

import java.io.File;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException {
        File file = new File("hello-world.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());
    }
}

运行结果:

false
false
false
true
true
false
true
false

示例3:普通文件的删除

import java.io.File;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException {
        File file = new File("some-file.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());
    }
}

运行结果:

false
true
true
true
false

示例4:观察 deleteOnExit 的现象

import java.io.File;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException {
        File file = new File("some-file.txt"); // 要求该文件不存在,才能看到相同的现象
        System.out.println(file.exists());
        System.out.println(file.createNewFile());
        System.out.println(file.exists());
        file.deleteOnExit();
        System.out.println(file.exists());
   }
}

运行结果:

false
true
true
true

程序运行结束后,文件还是被删除了!


示例5:观察目录的创建

import java.io.File;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException {
        File dir = new File("some-dir"); // 要求该目录不存在,才能看到相同的现象
        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());
   }
}

运行结果:

false
false
true
true
false

示例6:观察目录创建2

import java.io.File;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException {
        File dir = new File("some-parent/some-dir"); // some-parent 和 somedir 都不存在
        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());
    }
}

运行结果:

false
false
false
false
false

mkdir() 的时候,如果中间目录不存在,则无法创建成功; mkdirs() 可以解决这个问题。

import java.io.File;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException {
        File dir = new File("some-parent/some-dir"); // some-parent 和 somedir 都不存在
        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());
    }
}

运行结果:

false
false
true
true
false

示例7:观察文件重命名

import java.io.File;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException {
        File file = new File("some-file.txt"); // 要求 some-file.txt 得存在,可以是普通文件,可以是目录
        file.createNewFile();
        File dest = new File("dest.txt");   // 要求 dest.txt 不存在
        System.out.println(file.exists());
        System.out.println(dest.exists());
        System.out.println(file.renameTo(dest));
        System.out.println(file.exists());
        System.out.println(dest.exists());
    }
}

运行结果:

true
false
true
false
true

示例8:list 的使用

import java.io.File;
import java.util.Arrays;

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

运行结果:

[.idea, dest.txt, hello-world.txt, lib, out, some-dir, some-parent, src, Test.iml]

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

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

相关文章

DBSyncer

DBSyncer是一款开源的数据同步中间件,提供MySQL、Oracle、SqlServer、PostgreSQL、Elasticsearch(ES)、Kafka、File、SQL等同步场景。支持上传插件自定义同步转换业务,提供监控全量和增量数据统计图、应用性能预警等。 特点 组合驱动,自定义…

Git——Windows平台创建github私有仓库详解

目录 1. 注册github,登录 1.1 注册 1.2 登录 2. 创建仓库 3. GitBash使用 3.1 UI界面下载 3.2 配置本地 3.3 配置github 4. 托管 1. 注册github,登录 官网 GitHub 1.1 注册 1.2 登录 2. 创建仓库 根据需要选择: 3. GitBash使用 3…

【从零开始学习深度学习】24.神经网络中池化层的作用:最大池化与平均池化

在之前二维卷积层介绍的图像物体边缘检测应用中,我们构造卷积核从而精确地找到了像素变化的位置。设任意二维数组X的i行j列的元素为X[i, j]。如果我们构造的卷积核输出Y[i, j]1,那么说明输入中X[i, j]和X[i, j1]数值不一样。这可能意味着物体边缘通过这两…

[附源码]计算机毕业设计的网上点餐系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis MavenVue等等组成,B/S模式…

自动控制原理笔记-自动控制的一般概念

目录 概念: 自动控制系统的基本组成: 基本控制方式: 一个控制系统的方框图:(由工作原理图绘制方框图) 控制系统的组成: 小结: ​​​​​​​ ​​​​​​​ ​​​​​​​ 梦开始的地方…

微火:AI绘图网站程序源码搭建,定制专属的ai绘画小程序

随着AI绘画的火热,群众对于AI绘画的需求与日俱增,目前已有的小程序、ai绘图软件已不能很好地满足当下用户的画图需求,经常排队生图,一排就是几个小时,或者前面直接8万人排队的现象早日屡见不鲜。 新的优秀的AI绘画小程…

java的序列化与反序列化

什么是序列化与反序列化 序列化: 说白了,就是把一个实现了Serializable接口(只有实现了这个接口的类才能被序列化与反序列化)的类去变成本地文件保存。 反序列化: 说白了,就是把上面保存的本地文件&#…

LeetCode62. 不同路径(java解法——动态规划)

1 题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径&#xff1f…

电脑一键重装一直在系统优化升级怎么办

小白一键重装一直在系统优化升级怎么办?电脑总是卡在这个画面上,遇到这种情况该怎么解决呢?遇到这种情况大家也不要慌,小面小编就来演示下如何解决小白一键重装一直在系统优化升级的问题。 工具/原料: 系统版本:win10家庭版 …

电脑免费录屏软件哪个好用?分享3款,亲测好用

相比于图片,视频给人的感受更加通俗易懂,短短几分钟的视频,就能将几十张图片想要表达的意思给表达出来。电脑录屏正是制作视频的其中一部分,但也有不少的小伙伴对于电脑录屏不太熟悉,希望小编分享一些电脑免费录屏软件…

HTML语法学习以及作业解答

文章目录技巧html标签练习作业01作业02作业03作业04作业05作业06作业07作业08作业09作业10技巧 1 输入 html5即可补全出html的骨架,或者是! tab键 2 MDN网站:https://developer.mozilla.org/zh-CN/ 3 div带回车,span后面不带回…

计组 | DRAM芯片、多模块存储器、加法器标志位、软件硬件的关系、扩展操作码、程序转换过程

内容来自 —— 王道 自用学习笔记整理 一、DRAM芯片与内存条 1.1、DRAM芯片 1.2、访问内存时DRAM芯片读取过程 多个芯片并行传输,每一轮每个芯片的行列都相同,n个芯片就会有n个超元 n个超元加起来就是数据总线的长度,如图中超元=8位,数据总线=8个超元=64位 1.3、DRAM引脚数…

使用Apifox创建Mock智能操作

去接口管理新建一个接口来设计 然后直接保存运行,就可以发现已经自动为我们的Mock添加上了相关的属性值,只需要输入相关的字段名就可以了。 设置自定义智能Mock,之前我们智能Mock生成的数据都是通过这个工具实现的。只要你的值匹配上了就会通…

从数据治理到数据应用,制造业企业如何突破数字化转型困境丨行业方案

我国制造业拥有31个大类、179个中类和609个小类,是全球产业门类最齐全、产业体系最完整的制造业。作为世界工厂,中国制造业在拉动本国经济增长、促进本国就业等方面贡献卓越,更是我国民生消费的底层基础。同时,中国从原来的原料出…

OpenSSL QuickStart

文章目录1. Windows环境PerlnasmOpenSSL编译VS测试项目2. Linux环境编译测试项目参考资料1. Windows环境 Windows 10VS 2019nasm汇编工具:https://nasm.us/Perl: 官网地址https://www.perl.org/get.htmlOpenSSL: 官网地址:https://www.opens…

2022下半年软件设计师备考经验帖

祝大家逢考必过 7月1号备考-11月05号考试 推荐up主:zst_2001 跟着视频来基本必过 以下是复习资料 章节章节01 - 计算机组成原理与体系结构07 - 法律法规与标准化与多媒体基础02 - 操作系统基本原理08 - 设计模式03 - 数据库系统09 - 软件工程04 - 计算机网络10 - …

垂直领域问答小程序开发,打开知识领域无限能量

知乎作为一款问答类app,深受大众信赖,知乎构建了一个人人都可以便捷接入的知识分享网络,让人们便捷的与世界分享知识、经验和见解,让我们发现更大的世界。知乎的成功让很多人看到了垂直领域问答小程序存在的商机,想要进…

[JavaScript]使用opencv.js实现基于傅里叶变换的频域水印(隐水印)

PS:查了多方资料,都没有提到用 JavaScript 来实现频域水印的教程,故经过笔者的实践,遂写一篇教程来简单介绍。 通过了解频域水印的相关知识,我理解了频域水印就是先将图片进行傅里叶变换,得到频域图&#x…

全国制造业新产品开发流程管理(甄选班)招生简章

近来,越来越多的TO C企业已经将业务从C端转型到了B端,而传统的市场品牌部门除了品牌相关的工作,也将会越来越多承担企业“增长”的业务;“营”与“销”脱节的是市场部门也越来越受到了Diss。 那么,To B产品经理能力提…

package xxx does not exist

1、开发环境如下: gradle 7.3.3: gradle插件:7.2 AS: 2、报错日志 /Users/andrew/Documents/React/Code/TestRetrofit/app/src/main/java/com/lwd/testretrofit/MainActivity.java:8: error: package com.lwd.testretrofit.lwd does not e…