【Java EE】文件操作

server/2024/11/14 2:43:48/

目录

1.认识文件

2.树型结构组织和目录

3.文件路径(Path)

4.其他知识

5.Java中操作文件

5.1File概述

5.1.1属性

5.1.2构造方法

5.1.3方法

5.2代码示例


1.认识文件

我们先来认识狭义的文件(file)。针对1硬盘这种持久化存储的I/O设备,当我们想要进行数据保存时,往往不是保存一个整体,而是独立成一个个的单位进行保存,这个独立的单位就被抽象成文件的概念,就类似与办公桌上一份份真实的文件一般。

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

2.树型结构组织和目录

同时,随着文件越来越多,对文件的系统管理也被提上了日程,如何进行文件的组织呢,就是按照层级结构进行组织——也就是我们数据结构中学习过的树形结构。这样,一种专门用来存放管理信息的特殊文件诞生了,也就是我们平时所谓文件夹或者目录的概念。

3.文件路径(Path)

如何在文件系统中如何定位我们的唯一的文件是要解决的问题。因为从树形结构的角度来看,树中的每个结点都可以被一条从跟开始,一直到达的结点的路径所描述,而这种描述方式就被称为文件的绝对路径。

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

4.其他知识

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

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

文件由于被操作系统进行了管理,所以会根据不同的用户,回赋予用户不同的对待该文件的权限,一般的可以认为有可读、可写、可执行文件。

Windows操作系统上,还有一类文件比较特殊,就是我们平时看到的快捷操作,这种文件只是对真实文件的一种引用而已。其他操作系统上也有类似的概念,例如,软链接等。

最后,很多操作系统为了实现接口的统一性,将所有的I/O设备都抽象了文件的概念,使用这一概念最为知名的就是Unix、Linux操作系统——万物皆文件。

5.Java中操作文件

Java中通过java.io.File类来对一个文件(包括目录)进行抽象的描述。注意,有File对象,并不代表真实存在该文件。

5.1File概述
5.1.1属性
修饰符及类型属性说明
static String pathSeparator依赖于系统的路径分隔符,String类型的表示

Static char

pathSeparator依赖于系统的路径分隔符,char类型的表示
5.1.2构造方法
签名说明
File(File parent,String child)根据父目录+孩子文件路径,创建一个新的File实例
File(String parhname)根据文件路径创建一个新的File实例,路径可以是绝对路径或者相对路径
File(String parent,String child)根据父目录+孩子文件路径,创建一个新的File实例,父目录用路径表示
5.1.3方法
修饰符及返回值类型方法签名说明
StringgetParent()返回File对象的父目录文件路径
StringgetName()返回File对象的纯文件名称
StringgetPath()返回File对象的文件路径
StringgetAbsoliutePath()返回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()判断用户是否对文件有可写权限
5.2代码示例

示例1

观察get系列的特点与差异

java">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());}
}

运行结果

java">hello-world.txt
..\hello-world.txt
D:\代码练习\⽂件⽰例1\..\hello-world.txt
D:\代码练习\hello-world.txt

示例2

普通文件的创建、删除

java">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());}
}

运行结果

java">//false
//false
//false
//true
//true
//false
//true
//false
//false

示例3

普通文件的删除

java">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());}
}

运行结果

java">//false true true true true false

示例4

观察deleteOnExit的现象

java">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());}
}

运行结果

java">//false true true true true

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

示例5

观察目录的创建

java">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());}
}

运行结果

java">//false false true true false

示例6

观察目录创建2

java">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 和 soSystem.out.println(dir.isDirectory());System.out.println(dir.isFile());System.out.println(dir.mkdir());System.out.println(dir.isDirectory());System.out.println(dir.isFile());}
}

运行结果

java">//false false false false false

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

java">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 和 soSystem.out.println(dir.isDirectory());System.out.println(dir.isFile());System.out.println(dir.mkdirs());System.out.println(dir.isDirectory());System.out.println(dir.isFile());}
}

运行结果

java">//false false true true false

示例7

观察文件重命名

java">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());}
}

运行结果

java">// true false true false true


http://www.ppmy.cn/server/8080.html

相关文章

社交媒体数据恢复:推特、Twitter

推特(Twitter)数据恢复:如何找回丢失的内容 随着社交媒体的普及,越来越多的人开始使用推特(Twitter)来分享生活点滴、发表观点和获取信息。然而,有时候我们会不小心删除了重要的推文&#xff0…

Docker - WEB应用实例

原文地址,使用效果更佳! Docker - WEB应用实例 | CoderMast编程桅杆Docker - WEB应用实例 在之前的章节中,仅对普通容器进行了演示,但在实际中常常使用到 Docker 容器中的 WEB 应用程序。 运行一个WEB应用 拉取镜像 创建一个容器…

Qt绘制边框有阴影兼容性问题

在Qt开发过程中,有时候我们要显示一个有阴影的对话框,这时一般采用自定义实现,然而最近在开发时软件时,Win11上显示正常,Win10或其他Win11电脑显示不正常,存在兼容性问题吗? 下面是具体的源码 …

Unity 线程相关知识

线程 线程介绍 通过线程执行函数和直接在主函数中调用函数的区别是:通过直接调用函数时会按照语句顺序逐句执行,必定会完成上一句后再执行下一句,而通过线程执行的函数会从调用开始与主函数同步执行 调用线程的方式 调用无参数函数线程的…

几道练习题八

第 1 题 【 问答题 】 • 多项式相加 我们经常遇到两多项式相加的情况, 在这里, 我们就需要用程序来模拟实现把两个多项式相加到一起。 首先, 我们会有两个多项式,每个多项式是独立的一行, 每个多项式由系数、 幂数这样…

计算机网络中的一些基本概念

ip地址:IP地址是ip协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。是用来区分主机的。 端口号:每个应用程序对应一个端口号,通过类似门牌号的端口号…

【PCL】教程correspondence_grouping对点云模型和点云场景进行特征提取,匹配,以及聚类找到模型与场景的匹配...

基于对应分组的 3D 对象识别 本教程旨在解释如何使用 pcl_recognition 模块执行基于对应分组的 3D 对象识别。具体来说,它解释了如何使用对应分组算法将 3D 描述符匹配阶段后的点对点对应集聚合到当前场景中的模型实例中。对于每个聚类,表示场景中的可能…

python 又一个点运算符操作的字典库:Munch

munch 库 又一个将字典(dict)变成类似对象(object)的库。这意味着你可以使用点符号(.)而不是方括号([])来访问字典的键。这使得代码更易读,尤其是在处理嵌套字典时。 相…