【JavaEE初阶】 认识文件与Java中操作文件

news2025/1/17 15:44:51

文章目录

  • 🌴认识文件
    • 🚩树型结构组织和目录
    • 🚩文件路径(Path)
    • 🚩知识扩展
  • 🎍Java 中操作文件
    • 🚩File 概述
      • 📌属性
      • 📌构造方法
      • 📌方法
    • 🚩File使用实例代码演示
      • 📌实例一
      • 📌实例二
      • 📌实例三
      • 📌实例四
      • 📌实例五
      • 📌实例六
      • 📌实例七
  • ⭕总结

🌴认识文件

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

🚩树型结构组织和目录

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

🚩文件路径(Path)

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

在这里插入图片描述

🚩知识扩展

即使是普通文件,根据其保存数据的不同,也经常被分为不同的类型,我们一般简单的划分为文本文件和二进制文件,分别指代保存被字符集编码的文本和按照标准格式保存的非被字符集编码过的文件。
在这里插入图片描述
在这里插入图片描述
Windows 操作系统上,会按照文件名中的后缀来确定文件类型以及该类型文件的默认打开程序。但这个习俗并不是通用的,在 OSX、Unix、Linux 等操作系统上,就没有这样的习惯,一般不对文件类型做如此精确地分类。
在这里插入图片描述
文件由于被操作系统进行了管理,所以根据不同的用户,会赋予用户不同的对待该文件的权限,一般地可以认为有可读、可写、可执行权限

在这里插入图片描述
Windows 操作系统上,还有一类文件比较特殊,就是平时我们看到的快捷方式(shortcut),这种文件只是对真实文件的一种引用而已。其他操作系统上也有类似的概念,例如,软链接(soft link)等
在这里插入图片描述
最后,很多操作系统为了实现接口的统一性,将所有的 I/O 设备都抽象成了文件的概念,使用这一理念,最为知名的就是 Unix、Linux 操作系统 —— 万物皆文件

🎍Java 中操作文件

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

值得注意的是,有 File 对象,并不代表真实存在该文件

🚩File 概述

我们先来看看 File 类中的常见属性、构造方法和方法

📌属性

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

📌构造方法

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

📌方法

修饰符及返回值类型方法签名说明
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()判断用户是否对文件有可写权限

🚩File使用实例代码演示

📌实例一

观察get系列的特点和差异

代码如下:

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

public class IODemo1 {
    public static void main(String[] args) throws IOException {
        File file = new File("./遇事问春风乄.txt");
        System.out.println(file.getName());
        System.out.println(file.getParent());
        System.out.println(file.getPath());
        System.out.println(file.getAbsolutePath());
        System.out.println(file.getCanonicalPath());
    }
}

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

也就是说这里的遇事问春风乄可能根本不存在

运行结果如下:
在这里插入图片描述

📌实例二

普通文件的创建、删除

代码如下:

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

public class IOdemo2 {
    public static void main(String[] args) throws IOException {
        File file = new File("./遇事问春风乄.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());
        //如果有重复,则不会创建。返回false
        System.out.println(file.createNewFile());
    }
}

结果如下:
在这里插入图片描述
如果你跟博主一样是使用IDEA编译器的话,还可以看到该文件路径下已经产生了该文件
在这里插入图片描述

📌实例三

普通文件的删除

代码如下:

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

public class IODemo3 {
    public static void main(String[] args) throws IOException {
        File file = new 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());
    }
}

结果展示:
在这里插入图片描述

📌实例四

观察 deleteOnExit 的现象

我们先来观察以下代码,没有加deleteOnExit

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

public class IODemo4 {
    public static void main(String[] args) throws IOException {
        File file = new File("./遇事问春风乄.txt"); // 要求该文件不存在,才能看到相同的现象
        System.out.println(file.exists());
        System.out.println(file.createNewFile());
        System.out.println(file.exists());
        //file.deleteOnExit();
        System.out.println(file.exists());
    }
}

结果如下:
在这里插入图片描述
注意这时候我们是可以看到我们创建了该文件的
在这里插入图片描述
当我们加上deleteOnExit后再来看看运行结果

在这里插入图片描述
但是呢,当程序运行结束后却观察不到该路径下的该文件。

这就是deleteOnExit方法的效果

📌实例五

观察目录的创建

import java.io.File;

public class IODemo5 {
    public static void main(String[] args) {
        File dir = new File("IO-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());
    }
}

结果如下:
在这里插入图片描述
在这里插入图片描述

📌实例六

观察目录创建2——mkdirs

import javax.swing.*;
import java.io.File;

public class IODemo5 {
    public static void main(String[] args) {
        File dir = new File("./IO-dir/aa/bb"); // 要求所有目录不存在,才能看到相同的现象
        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());
    }
}

运行结果如下:
在这里插入图片描述
mkdir() 的时候,如果中间目录不存在,则无法创建成功; mkdirs() 可以解决这个问题。

import javax.swing.*;
import java.io.File;

public class IODemo5 {
    public static void main(String[] args) {
        File dir = new File("./IO-dir/aa/bb"); // 要求所有目录不存在,才能看到相同的现象
        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());
    }
}

结果展示:
在这里插入图片描述
在这里插入图片描述

📌实例七

观察文件重命名

首先创建一个文件如下:
在这里插入图片描述
文件重命名如下:
在这里插入图片描述

⭕总结

关于《【JavaEE初阶】 认识文件与Java中操作文件》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!

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

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

相关文章

LIS检验科信息管理系统源码 标本核收、采集检验结果、书写检验报告、质量控制

LIS检验科信息管理系统源码 LIS是采用软件解决数据接收方式的医疗系统之一,强化了病人从开检验单检验,到最后检验报告的各项步骤,更替代了以前的缓慢、不可靠的纯手工数据接收方式,使得医疗检验的步骤更有条理、效率更高、检验结果…

一致性哈希揭秘,深入解析其工作原理

前言 在进行一致性哈希介绍前,先思考2个问题: 什么是Hash一致性Hash和Hash的关系是什么 对于第一个问题Hash的定义 Hash也成散列,基本原理就是把任意长度的输入,通过hash算法变成固定长度的输出。 对于第二个问题&#xff0c…

关于 MapboxGL 在 Vue 中的简单使用

前言问题 关于我为什么使用了 在线的 js引入方法,而不是使用 npm 直接下载依赖问题,之前有一篇文章讲过原因:关于 Vue-iClient-MapboxGL 的使用注意事项 网上提供的 vue-iclient-mapboxgl 比较多,但是我这里使用的是 iclient-su…

win11系统msvcp120.dll丢失的解决方法,亲测有效的详细方法

在计算机使用过程中,我们常常会遇到一些错误提示,其中之一就是“msvcp120.dll丢失”这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题,我们需要采取一些修复措施。本文将介绍五个修复msvcp120.dll丢失的方法,帮助大…

Linux 虚拟内存参数配置

一、问题出发点 Jun 1 10:30:21 audit1 kernel: swapper: page allocation failure. order:1, mode:0x20 Jun 1 10:30:21 audit1 kernel: Pid: 0, comm: swapper Tainted: G --------------- T 2.6.32-431.20.3.el6.x86_64 #1 Jun 1 10:30:21 audit1 kernel: Call Trace: Jun …

Vue+element el-date-picker 时间日期选择器设置默认值,选择框不显示问题(已解决)

时间选择器默认值的问题 显示的时候如果用下面的方式赋值将不会显示出来: this.deviceFormData.time[0] that.$filterArray.formatDatehh(start);this.deviceFormData.time[1] that.$filterArray.formatDateEnd(end);实际上是有数据的,但是不会显示出…

18、SpringCloud -- 沙箱环境测试支付宝支付

目录 沙箱环境测试支付宝支付下载安装密钥:安装:生成密钥:沙箱环境配置支付宝SDK配置下载SDK&DEMO支付宝SDK导入支付宝SDK配置配置tomcat访问端口占用问题:解决方法:1、旧版沙箱配置-成功旧版沙箱自定义密钥2、新版沙箱配置-失败测试:1、点击付款2、模拟登录买家的账…

租赁小程序定制开发-让租赁业务更加高效

租赁小程序,让租赁变得更加方便。你可以在平台上找到各种商品,从生活用品到设备,只需简单的搜索和预订操作。而且,支付也可以在线完成,无需到店付款。当租赁期满,商品可以方便地归还,同时&#…

成都优优聚:外卖代运营服务:助力餐饮业腾飞!

随着互联网的快速发展,外卖行业逐渐成为了人们日常生活中不可或缺的一部分。而在这个领域中,外卖代运营服务正逐渐崭露头角,成为助力餐饮业腾飞的强大引擎。本文将为你详细解析外卖代运营服务的优势、现状及未来发展趋势,让你在外…

【云原生-K8s】Kubernetes安全组件CIS基准kube-beach安装及使用

基础介绍kube-beach介绍kube-beach 下载百度网盘下载wget下载 kube-beach安装kube-beach使用基础参数示例结果说明 基础介绍 为了保证集群以及容器应用的安全,Kubernetes 提供了多种安全机制,限制容器的行为,减少容器和集群的攻击面&#xf…

【Docker】从命名空间和路由角度探究Docker的bridge网络

桥接网络是Docker的默认网络模式。在桥接网络中,Docker会为每个容器创建一个虚拟网络接口,并为容器分配一个IP地址。容器可以通过桥接网络与主机和其他容器进行通信,也能暴露端口供外部访问。 容器之间的通信原理 首先我们创建两个容器&…

【数据结构初阶】十一、归并排序(比较排序)的讲解和实现(递归版本 + 非递归版本 -- C语言实现)

相关代码gitee自取: C语言学习日记: 加油努力 (gitee.com) 接上期: 【数据结构初阶】十、快速排序(比较排序)讲解和实现 (三种递归快排版本 非递归快排版本 -- C语言实现)-CSDN博客 常见排序算法的实现(续上期&a…

自考02378《信息资源管理》第二章信息化规划与组织——思维导图

备战2024年04月自考科目02378《信息资源管理》第二章信息化规划与组织 思维导图如下: 以上便是本文的全部内容了,不知道对你有没有帮助呢。 我会认真写好每一篇文章,一直努力下去!

网络基础-4

链路聚合技术 根据灵活性地增加网络设备之间的带宽供给增强网络设备之间连接的可靠性节约成本 链路聚合 是将两个或更多数据信道结合成一个单个的信道,该信道以一个单个的更高带宽的逻辑链路出现。链路聚合一般用来连接一个或多个带宽需求大的设备,例…

生化危机8:村庄- RESIDENT EVIL VILLAGE- 全新篇章,恐惧再升级

想要感受真正的生存恐怖吗?现在,最令人期待的恐怖游戏《生化危机8:村庄》即将登陆!在这个充满神秘和危险的村庄中,你将体验到前所未有的恐惧。 《生化危机8:村庄》是CAPCOM公司开发的生化危机系列最新作&a…

java毕业设计基于springboot+vue高校本科学生综评系统

项目介绍 本系统是利用Spring Boot框架而设计的一款结合用户的实际情况而设计的平台,利用VUE技术来将可供学生和管理员来使用的所有界面来显示出来,利用Java语言技术来编程实现用户和管理员所执行的各类操作业务逻辑,以MySQL数据库来存取系统…

Taro React组件开发(12) —— RuiVerifyPoint 行为验证码之文字点选

1. 效果预览 2. 使用场景 账号登录,比如验证码发送,防止无限调用发送接口,所以在发送之前,需要行为验证! 3. 插件选择 AJ-Captcha行为验证码文档AJ-Captcha行为验证码代码仓库为什么要选用【AJ-Captcha行为验证码】呢?因为我们管理后台使用的是 pigx ,它在后端采用的是【…

Elasticsearch下载安装,IK分词器、Kibana下载安装使用,elasticsearch使用演示

首先给出自己使用版本的网盘链接:自己的版本7.17.14 链接:https://pan.baidu.com/s/1FSlI9jNf1KRP-OmZlCkEZw 提取码:1234 一般情况下 Elastic Search(ES) 并不单独使用,例如主流的技术组合 ELK&#xff08…

汽车EDI:福特Ford EDI项目案例

项目背景 福特(Ford)是世界著名的汽车品牌,为美国福特汽车公司(Ford Motor Company)旗下的众多品牌之一。此前的文章福特FORD EDI需求分析中,我们已经了解了福特Ford EDI 的大致需求,本文将会介…

Vue之CSS基础

CSS:层叠样式表 1、选择器 从模板template中选择某元素进行样式设置 需要注意的是作用域到底是当前模板还是整个html文档 1.1 基础(单一)选择器 标签、类、 id、通配符 标签、直接使用标签名,比如div,span… 优点:全选 模板中的名{。。。}…