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

文章目录

  • 🌴认识文件
    • 🚩树型结构组织和目录
    • 🚩文件路径(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());//如果有重复,则不会创建。返回falseSystem.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.hqwc.cn/news/156335.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优思学院|RCA(根本原因分析)四大步骤

在现代的制造业或者甚至是商业环境中,问题和突发事件不可避免地出现。 为了有效地解决这些问题并防止它们再次发生,根本原因分析(RCA)成为了至关重要的工具。 RCA是一种系统性的方法,涉及数据采集、因果图、根本原因…

el-dropdown自定义样式,不影响其他组件

原来的样式: 修改后的样式: 给el-dropdown-menu添加类名dropdown-menu <el-dropdown-menu slot"dropdown" class"dropdown-menu"><router-link to"/user/profile"><el-dro…

Linu之VM及WindowsServer安装

# 1.操作系统 ## 1.1.什么是操作系统 操作系统&#xff08;Operating System&#xff0c;简称OS&#xff09;是一种系统软件&#xff0c;它是计算机硬件和应用软件之间的桥梁。它管理计算机的硬件和软件资源&#xff0c;为应用程序提供接口和服务&#xff0c;并协调应用程序的…

自动化混沌工程 ChaosMeta V0.6 版本发布

混沌工程 ChaosMeta 的全新版本 V0.6.0 现已正式发布&#xff01;该版本包含了许多新特性和增强功能&#xff0c;在编排界面提供了包括流量注入、度量等各类节点的支持&#xff0c;可视化支撑演练全流程。解决混沌工程原则中“持续自动化运行实验”的最后一公里问题。 简介 Ch…

CPU就绪情况及其对虚拟机性能的影响

CPU就绪是虚拟化中的一种性能度量&#xff0c;用于指示物理CPU中的潜在问题&#xff0c;作为对系统效率的度量&#xff0c;它用于跟踪性能和资源利用率&#xff0c;并避免严重错误。为了理解它在管理虚拟机中的重要性&#xff0c;我们将探讨CPU就绪作为一种性能指标的作用。 让…

【Python语言速回顾】——爬虫基础知识

目录 一、爬虫概述 1、准备工作 2、爬虫类型 3、爬虫原理 二、爬虫三大库 1、Requests库 2、BeautifulSoup库 3、Lxml库 一、爬虫概述 爬虫又称网络机器人&#xff0c;可以代替人工从互联网中采集、整理数据。常见的网络爬虫主要有百度公司的Baiduspider、360公司的36…

AI赋能,轻松出爆文!AI新闻创作新时代,你准备好了吗?

众所周知&#xff0c;传统新闻报道需要大量的人工参与&#xff0c;不仅耗时耗力&#xff0c;还对媒体工作者的文字功底和知识积累有很高的要求。但随着人工智能技术的发展&#xff0c;大模型在新闻写作领域展现出强大的潜力。通过AI写作技术&#xff0c;在很大程度上实现了新闻…

苹果AirTag平替产品选择,国内外支持苹果Find My芯片功耗全面对比

2021年4月20,苹果在春季产品发布会上推出了全新的产品类型- AirTag,将哆啦A梦的追踪徽章带到了现实。这个小产品当年并没有像其它苹果新品那样一朝爆红。随着年轮缓缓而坚定地前行, AirTag也缓缓而坚定地前行,并被越来越多的人接受和喜欢。 深入思考AirTag背后的产品逻辑和实现…

在ros中 两个摄像头

欧最后有了一个需求&#xff0c;需要在ros中接两摄像头&#xff0c;完成后写一下步骤。 以下是我的设备&#xff0c; 通过一个3.0的转接头来连接两个摄像头&#xff0c; 首先&#xff0c;通过下面的命令 ls /dev/video* //插上摄像头后打开终端查看是否检测到摄像头 我这…

Spring系列之基础

目录 Spring概述 Spring的优点 Spring Framework的组成 总结 Spring概述 Spring 是目前主流的 Java Web 开发框架&#xff0c;是 Java 世界最为成功的框架。该框架是一个轻量级的开源框架&#xff0c;具有很高的凝聚力和吸引力。它以Ioc&#xff08;控制反转&#xff09;和…

做好团队沟通和协调 不可忽略的5个重点

做好团队的沟通和协调&#xff0c;可以确保成员之间及时交流、分享信息和解决问题。这有助于避免信息滞后和工作冲突&#xff0c;提高工作效率。如果沟通不顺畅&#xff0c;往往导致成员间信息传递不及时或遗漏&#xff0c;容易产生误解和冲突&#xff0c;影响项目进度地顺利开…

java--方法在计算机中的执行原理

1.方法在计算机中的执行原理 方法被调用的时候&#xff0c;是进入到栈内存中运行 栈&#xff1a;是先进后出的&#xff0c;后面进去的方法会先进去&#xff0c;用完里面的方法就会弃掉 例如&#xff1a;现在有三个方法&#xff0c;分别是方法A、方法B、方法C 先加载main方法…