<JavaEE> 文件IO -- File类和文件操作

目录

一、文件的概念

二、文件系统

三、文件类型

四、使用 File 类进行文件操作

4.1 File 类中的 pathSeparator 属性

4.2 File 类构造方法

4.3 File 类常用方法


一、文件的概念

什么是文件?

广义上的“文件”是指抽象化的操作系统中的硬件设备和软件资源,目的是对这些“文件”进行同一的管理。

狭义上的“文件(FIle)”则只是指在硬件设备中保存的数据,这些数据往往以一个一个的单位进行保存,每一个独立的单位就称为“文件”。

二、文件系统

1)什么是文件系统?

是一个“树形结构”实现的系统,用于组织管理文件。

操作系统通过“目录”对文件进行组织管理。利用目录的层次结构来描述文件所在位置,即“路径”。
由于“树形结构”的特点,每个文件都会有自己的唯一路径。通过路径,就可以找到文件。
2)绝对路径和相对路径
绝对路径

从“树形结构”的根节点开始描述,一直到叶子节点(即文件),这样的描述方式称为文件的“绝对路径”(absolute path)。在windows系统中,绝对路径从盘符开始描述。

相对路径从指定的任意节点出发,该节点被称为“基准目录”。以该节点为基准,对文件进行描述,这样的描述方式称为“相对路径”(relative path)。想要得到相对路径,必须先明确基准目录。
3)相对路径的两个符号
.“ . ”号表示当前目录。
..“ .. ”号表示当前目录的上一级目录。
4)表示相对路径的示例
基准目录:D:/Test/A/
相对路径(当前目录下的test1.txt文件):./test1.txt
相对路径(上级目录下,B文件夹中的test2.txt文件):../B/test2/txt

三、文件类型

有哪些文件类型?
文本文件

文本文件是指保存合法字符的文件,字符以字符串形式保存。合法字符是指被字符集编码的文本,如“UTF-8”等字符集。

二进制文件二进制文件是指文件保存的是二进制数据。

四、使用 File 类进行文件操作

在 Java 中,文件的操作分为两类
操作文件系统

通过 File 类,在系统中进行增、删、查等操作。(下文介绍该类)

操作文件内容通过 流对象,在文件中读取或写入内容。

4.1 File 类中的 pathSeparator 属性

pathSeparator 属性是什么?
不同的操作系统使用“/”或“\”作为目录分隔符,为使两种情况都能被成功识别,File 中使用了 pathSeparator 属性来对这两个符号做自适应。

4.2 File 类构造方法

File 类中常用的构造方法有以下三种

public File(File parent, String child)

根据父目录和子路径,创建新的 File 实例。

public File(String pathname)

根据文件路径,创建新的 File 实例。路径可以是绝对或相对路径。

public File(String parent, String child)

根据父目录和子路径,创建新的 File 实例。

4.3 File 类常用方法

File 类中有以下常用的方法

public String getParent()

返回 File 对象的父目录

public String getName()

返回 File 对象的文件名

public String getPath()

返回 File 对象的文件路径

public String getAbsolutePath()

返回 File 对象的绝对路径

public String getCanonicalPath()

返回 File 对象,修饰过的绝对路径

public boolean exists()

判断  File 对象是否真实存在

public boolean isDirectory()

判断 File 对象是否为目录

public boolean isFile()

判断 File 对象是否为文件

public boolean createNewFile()

创建新的 File 对象

public boolean delete()

删除 File 对象

public void deleteOnExit()

在进程结束后,删除 File 对象

public String[] list()

返回 File 对象目录下的所有文件名

public File[] listFiles()

返回 File 对象目录下的所有文件名

public boolean mkdirs()

创建 File 对象的目录,包括中间目录

public boolean renameTo(File dest)

修改文件名、文件路径;修改文件路径与剪切粘贴类似;

public boolean canRead()

判断是否对文件有可读权限

public boolean canWrite()

判断是否对文件有可写权限

代码演示 getAbsolutePath() 和 getCanonicalPath() :

    //文件的基准目录是"C:/Test/A"。
    public static void main(String[] args) throws IOException {
        File file = new File("./test.txt");
        System.out.println("AbsolutePath-> "+file.getAbsolutePath());
        System.out.println("CanonicalPath-> "+file.getCanonicalPath());
    }

//运行结果:
AbsolutePath-> C:\Test\A\.\test.txt
CanonicalPath-> C:\Test\A\test.txt

可以看出AbsolutePath就是父目录和相对路径的字符串连接。
而CanonicalPath则是经过了修饰处理的。

代码演示 exists()、isDirectory()、isFile() 和 createNewFile() :

    public static void main(String[] args){
        File file = new File("C:/Test/A/test.txt");
        
        System.out.println("文件是否存在:" + file.exists());
        System.out.println("这是一个目录:" + file.isDirectory());
        System.out.println("这是一个文件:" + file.isFile());

        System.out.println("创建新文件:" + file.createNewFile());
    }


//运行结果:
文件是否存在:false
这是一个目录:false
这是一个文件:true
创建新文件:true

可以看出,使用 File 构造方法时,传入的文件路径并不一定需要真实存在。
通过 exists() 可以判断文件是否真实存在。
通过 createNewFile() 可以创建出一个新文件,文件的路径与构造方法的参数相同。

代码演示 list() 和 listFiles() :

//目录"C:/Test"中,存在文件夹"A"、文件夹"B"和文件"Test.txt"。

    public static void main(String[] args){
        File f = new File("D:/Learn/E-JavaEE");

        File[] files = f.listFiles();
        for (File file : files){
            System.out.println(file.getName());
        }
    }

//运行结果:
Test.txt
A
B

list() 和 listFiles() 用法相同,只是返回值不同。
list() 返回字符串数组。
listFiles() 返回文件数组。

代码演示 renameTo() :

    public static void main6(String[] args) throws IOException {
        File src = new File("D:/Test/A/test.txt");
        File dest = new File("D:/Test/B/test1.txt");
        System.out.println("重命名:" + src.renameTo(dest)); 
    }

//运行结果:
重命名:true

可以看到,虽然方法名称为“重命名”,但是重命的可以不只是名,还可以是目录。
这就达成了剪切粘贴的效果。

阅读指针 -> 《文件IO -- 流对象操作文件内容》

<JavaEE> 文件IO -- 数据流和文件内容操作(Reader 和 Writer 、InputStream 和 OutputStream)-CSDN博客文章浏览阅读280次。介绍了数据流的概念和使用,着重介绍了字符流中的 Reader 类和 Writer 类、字节流中的 InputStream类和 OutputStream类https://blog.csdn.net/zzy734437202/article/details/134972142

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

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

相关文章

TC118AH 单通道内置功率 MOS 全桥驱动器

一、 TC118AH 特点 : 1、单通道内置功率 MOS 全桥驱动 2、驱动前进、后退、停止及刹车功能 3、内置迟滞热效应过热保护功能 4、低导通电阻(0.5Ω/1000mA) 5、连续输出电流可达 1.8A,峰值 2.5A 6、 无需外W大滤波电容,只需小贴片电容 7…

大数据Doris(三十八):Aggregate 和 Uniq 模型中的 ROLLUP

文章目录 Aggregate 和 Uniq 模型中的 ROLLUP 一、获得每个用户的总消费

Python-Selenium-使用 pywinauto 实现 Input 上传文件

当前环境:Win10 Python3.7 pywinauto0.6.8,selenium3.14.1 示例代码 from pywinauto import Desktop import osapp Desktop() dialog app[打开] dialog[Edit].set_edit_text(os.getcwd() .\\example-01.jpg) dialog[Button].click() 其他方法&…

airpods 无法使用Windows电脑充电的解决方法

打开设置 -> 蓝牙与其他设备 -> 显示更多设备 往下翻,找到“更多设备与打印机设置”,打开设备界面: 打开" Airpods Case",找到“硬件”选项 -> 双击"符合HID标准的供应商定义设备" -> “驱动程序…

【源码解析】Semaphore角度聊聊AQS

案例 Semaphore,俗称信号量,它是操作系统中PV操作的原语在java的实现,它也是基于 AbstractQueuedSynchronizer实现的 private static ExecutorService threadPool Executors.newFixedThreadPool(4);private static Semaphore semaphore ne…

MySQL数据库,触发器、窗口函数、公用表表达式

触发器 触发器是由事件来触发某个操作(也包含INSERT、UPDATE、DELECT事件),如果定义了触发程序,当数据库执行这些语句时,就相当于事件发生了,就会自动激发触发器执行相应的操作。 当对数据表中的数据执行…

进制之间的转换——n进制转换为m进制(C/C++实现,简单易懂)

目录 🌈前言: 📁 什么是进制转换: 📁其他进制转换成十进制: 📂二进制( B ) ——> 十进制( D ) 📂八进制( O ) ——> 十进制( D ) 📂十六进制( H ) ——> 十进制…

visual stdio code运行vue3

npm init vuelatest 该命令初始化vue项目 使用visual stdio code创建vue项目 ,这边是vue-project文件夹 vs code打开项目 vscode操作vue项目 vscode操作vue项目

数据分析思维导图

参考: https://zhuanlan.zhihu.com/p/567761684?utm_id0 1、数据分析步骤地图 2、数据分析基础知识地图 3、数据分析技术知识地图 4、数据分析业务流程 5、数据分析师能力体系 6、数据分析思路体系 7、电商数据分析核心主题 8、数据科学技能书知识地图 9、数据挖掘…

设计模式 简单工厂 工厂方法模式 抽象工厂模式 Spring 工厂 BeanFactory 解析

工厂模式介绍 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。它是创建型模式。 简单工厂 简单工厂模式是指由一个工厂对象决定创建出哪一种产品类的实例, 但它不属于GOF 23种设计模式 简单工厂适用于工厂类负责创建的对象较少的场景,…

Spring IOC—基于注解配置和管理Bean 万字详解(通俗易懂)

目录 一、前言 二、基于注解配置Bean 1.基本介绍 : 2.应用实例 : 3.注意事项 : 三、手动实现Spring 注解配置机制 1.需求 : 2.思路 : 3.实现 : 3.1 自定义注解类 3.2 自定义配置类 3.3 自定义容器类 3.4 在测试类中进行测试 四、自动装配 0.总述 : 1.AutoWired自动装…

Autosar DEM DTC的Debounce策略

文章目录 简介Debounce策略1、基于计数器的 Debounce 策略2、基于时间的Debounce策略 简介 故障事件防抖,与按键防抖(软件需要延时确认按键不是误触发)的作用类似,目的是为了防止事件误触发采取的策略。 因为DTC并不是一达到触发…

Transformer Decoder的输入

大部分引用参考了既安的https://www.zhihu.com/question/337886108/answer/893002189这篇文章,个人认为写的很清晰,此外补充了一些自己的笔记。 弄清楚Decoder的输入输出,关键在于图示三个箭头的位置: 以翻译为例: 输…

2023.12.16 关于 分布式系统 基本介绍

目录 单机架构 服务器负载过高问题 解决方法 分布式系统 引入更多的服务器节点 负载均衡 数据库读写分离 引入缓存 数据库分库分表 引入微服务 基本概念 应用(Application)/ 系统(System) 模块(Modul…

力扣日记12.18-【二叉树篇】合并二叉树

力扣日记:【二叉树篇】合并二叉树 日期:2023.12.18 参考:代码随想录、力扣 617. 合并二叉树 题目描述 难度:简单 给你两棵二叉树: root1 和 root2 。 想象一下,当你将其中一棵覆盖到另一棵之上时&#xf…

软件测试培训三个月,想找到工作,到底应该怎么搞

功能方面:问的最多的就是测试流程,测试计划包含哪些内容,公司人员配置,有bug开发认为不是 bug怎么处理,怎样才算是好的用例,测试用例设计方法(等价类,边界值等概念方法)&…

C# 使用FluentHttpClient请求WebApi

写在前面 FluentHttpClient 是一个REST API 异步调用 HTTP 客户端,调用过程非常便捷,采用流式编程,可以将所有请求所需的参数一次性发送,并直接获取序列化后的结果。 老规矩从NuGet上安装该类库: 这边一定要认准是 P…

python/c++ Leetcode题解——1.两数之和

目录 方法1:枚举法 思路 Code 方法2:哈希表 思路 Code 方法1:枚举法 思路 最容易想到的方法是枚举数组中的每一个数 x,寻找数组中是否存在 target - x。 当我们使用遍历整个数组的方式寻找 target - x 时,需要注意到每一个位于 x 之前的元素都已…

使用GPU利用ffmpeg-在Pyhton代码中实现视频转码到MP4格式的过程记录【失败告终-原因是显示型号太老不支持】

01-安装Nvida的显卡驱动和CUDA 参考文章 https://blog.csdn.net/wenhao_ir/article/details/125253533 进行安装。 02-下载ffmpeg的可执行文件 下载ffmpeg的Windows可执行文件,下载页面: https://www.gyan.dev/ffmpeg/builds/#release-builds 我在202…

深度学习中的潜在空间

1 潜在空间定义 Latent Space 潜在空间:Latent ,这个词的语义是“隐藏”的意思。“Latent Space 潜在空间”也可以理解为“隐藏的空间”。Latent Space 这一概念是十分重要的,它在“深度学习”领域中处于核心地位,即它是用来学习…