【Java EE 】认识文件与Java文件操作

目录

  • 🍀认识文件
    • 🌸树型结构组织 和 目录
    • 🌸文件路径(Path)
    • 🌸其他知识
  • 🌳Java 中操作文件
    • 🌸File 概述
      • 🌻属性
      • 🌻构造方法
      • 🌻方法
    • 🌸代码示例
      • 1. 观察 get 系列的特点和差异
      • 2.普通文件的创建、删除
      • 3.普通文件的删除
      • 4.观察 deleteOnExit 的现象
      • 5.观察⽬录的创建
      • 6.观察⽬录创建2
      • 7.观察⽂件重命名
  • ⭕总结

🍀认识文件

我们先来认识狭义上的⽂件(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 类中的常见属性、构造⽅法和⽅法

🌻属性

在这里插入图片描述

🌻构造方法

在这里插入图片描述

🌻方法

在这里插入图片描述

🌸代码示例

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 和 so
        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 和 so
 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 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

⭕总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

stm32学习笔记:I2C通信协议原理和软件I2C读写MPU6050

概述 第一块:介绍协议规则,然后用软件模拟的形式来实现协议。 第二块:介绍STM32的iic外设,然后用硬件来实现协议。 程序一现象:通过软件I2C通信,对MPU6050芯片内部的寄存器进行读写,写入到配…

OJ输入问题+准备

写在之前: 发现题目输入是这样的: 我的问题:如何通过空格分割这些输入的字符串并分别保存!!(C语言scanf好解决一点但我选择C....) C引入了ostringstream、istringstream、stringstream这三个类…

【无标题】计算机主要应用于哪些领域

科学计算(或称为数值计算)、数据处理(信息管理)、辅助工程、生产自动化、人工智能。1、科学计算(或称为数值计算):早期的计算机主要用于科学计算。目前,科学计算仍然是计算机应用的一…

计算机组成原理-累加器实验——沐雨先生

一、实验目的 1.理解累加器的概念和作用 2.连接运算器、存储器和累加器,熟悉计算机的数据通路 3.掌握使用微命令执行各种操作的方法。 二、实验要求 1.做好实验预习,读懂实验电路图,熟悉实验元器件的功能特性和使用方法。在实验之前设计…

自动控制原理——根轨迹法

本文中所有的截图都来自于西北工业大学卢京潮教授的ppt,侵删。 根轨迹的基本概念 根轨迹——系统性能指标 举例说明: 在使用根轨迹法时,一般说根轨迹就说说闭环意义上的根轨迹,没有开环根轨迹一说。我们习惯使用首1标准型&#…

【prompt四】Domain Prompt Learning for Efficiently Adapting CLIP to Unseen Domains

motivation 领域泛化(DG)是一个复杂的迁移学习问题,旨在学习未知领域的可泛化模型。最近的基础模型(FMs)对许多分布变化都具有鲁棒性,因此,应该从本质上提高DG的性能。在这项工作中,我们研究了采用视觉语言基础模型CLIP来解决图像分类中的DG问题的通用方法。虽然ERM使用标…

Node.js安装及环境配置详细教程

一、下载Node.js安装包 官网下载链接[点击跳转] 建议下载LTS版本(本教程不适用于苹果电脑) 二 、安装Node.js 2.1 下载好安装包后双击打开安装包,然后点击Next 2.2 勾选同意许可后点击Next 2.3 点击Change选择好安装路径后点击Next&#…

Ubuntu下anaconda迁移到另外的目录

文章目录 前言一、原因二、迁移1.复制到指定迁移目录2. 修改复制后的anaconda3 内容3. 修改对应搭建的每个环境的pip4.修改系统配置文件,使得设置生效 三、实际测试四、总结 前言 好记性不如烂笔头,简单的记录下在ubantu18.04下迁移anaconda的目录 一、…

SpringBoot自定义注解+反射实现 excel 导入的数据组装及字段校验

在前段时间的开发工作中,接手了一个很简单,很普通的开发任务。 要求实现一个单表的基础数据的批量导入功能。 评估下来,用户每次批量导入的数据量也就几千条,也不大。 是不是很简单,没有骗你们吧。但是呢&#xff0…

常用工具——Gradle

前言 实践是最好的学习方式,技术也如此。 文章目录 前言一、Gradle 简介二、文件结构详解 一、Gradle 简介 Gradle 文件是一个独立于 android 之外的一个东西; 是什么 gradle 就是编译、打包 Android 工程的一个构建工具;build.gradle 文件&…

中仕公考:非应届生能考三支一扶吗?

如果是非应届生身份能参加三支一扶考试吗? “三支一扶”是一项公益性的就业计划,全称为“支持教育、支持农村、支持医疗和扶贫”。该计划主要是针对大学生毕业生设置的,通过招募他们到基层单位工作,以解决基层单位人才短缺的问题&#xff0…

MapReduce内存参数自动推断

MapReduce内存参数自动推断。在Hadoop 2.0中,为MapReduce作业设置内存参数非常繁琐,涉及到两个参数:mapreduce.{map,reduce}.memory.mb和mapreduce.{map,reduce}.java.opts,一旦设置不合理,则会使得内存资源浪费严重&a…

java中this关键字的使用

this关键字的使用 this的用法1)this.data2)this.method;3)this() this的用法 1)this.data; (访问属性) 2)this.method; (访问方法) 3&…

wait() 、notify()、notifyAll() 的详细用法

文章目录 💐wait() 讲解💐notify() 讲解💐notifyAll()💡wait() 和 sleep() 的区别 首先,我们知道,线程的执行顺序是随机的(操作系统随机调度的,抢占式执行),但是有时候,我…

软件测试面试题(全)

【软件测试面试突击班】2024吃透软件测试面试最全八股文攻略教程,一周学完让你面试通过率提高90%!(自动化测试) 1.B/S架构和C/S架构区别 B/S 只需要有操作系统和浏览器就行,可以实现跨平台,客户端零维护&a…

CSS全局样式的设置,web开发交流

面试题 HTML 1,html5有哪些新特性? 2,html5移除了那些元素? 3,如何处理HTML5新标签的浏览器兼容问题 戳这里领取完整开源项目:【一线大厂前端面试题解析核心总结学习笔记Web真实项目实战最新讲解视频】…

智能硬件 | AI PC新市场,英特尔、高通、AMD、苹果谁能拔得头筹?

我们普通人和大模型的距离有多远?AI发展到2024年,已经附着在各种智能硬件上了,什么AI PC,AI手机,AI蓝牙音箱,AI学习机,AI鼠标等等,但其实虽然很多产品加上了个AI的名头,但…

xss.haozi:0x00

0x00没有什么过滤所以怎么写都没有关系有很多解 <script>alert(1)</script>

实现session共享的方法总结完整版

文章目录 实现session共享的方法总结完整版1、使用共享数据库&#xff1a;2、使用粘性会话&#xff08;Sticky Session&#xff09;&#xff1a;3、使用缓存系统&#xff1a;4、使用分布式文件系统&#xff1a;5、使用中央认证服务&#xff1a;6、使用会话复制&#xff1a;7、使…

LLM 模型量化推理速度评测

最近了解了下些常见的推理和加速方案&#xff1a; 1、量化方案&#xff1a; gptq、quantization、int8、int4、AWQ、Speculative Decoding、GGUF 2、Attention加速方案&#xff1a; atten的不同种类fused attention 3、内存层面&#xff1a; kv_cache策略、page_attention…