【Java EE】文件操作

目录

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方法
修饰符及返回值类型 方法签名 说明
String getParent() 返回File对象的父目录文件路径
String getName() 返回File对象的纯文件名称
String getPath() 返回File对象的文件路径
String getAbsoliutePath() 返回File对象的绝对路径
String getCanonicalPath() 返回File对象的修饰过的绝对路径
boolean exists() 判断File对象描述的文件是否真实存在
boolean isDirectory() 判断File对象代表的文件是否是一个目录
boolean isFile() 判断File对象代表的文件是否是一个普通文件
boolean createNewFile() 根据File对象,自创建一个空文件。成功创建后返回true
boolean delete() 根据File对象,删除该文件。成功删除后返回true
void deleteOnExit() 根据File对象,标注文件将被删除,删除动作会加到JVM运行结束时才会进行
String[] list() 返回File对象代表的目录下的所有文件名
File[] listFiles() 返回File对象代表的目录下的所有文件,以File对象表示
boolean mkdir() 创建File对象代表的目录
boolean mkdirs() 创建File对象代表的目录,如果必要,会创建中间目录
boolean renameTo(File dest) 进行文件改名,也可以视为我们平时的剪切、粘贴操作
boolean canRead() 判断用户是否对文件有可读权限
boolean canWrite() 判断用户是否对文件有可写权限
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 和 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());
 }
}

运行结果

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

运行结果

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
相关推荐
LonelyProgramme几秒前
Flink定时器
大数据·flink
古希腊掌管学习的神18 分钟前
[LeetCode-Python版]相向双指针——611. 有效三角形的个数
开发语言·python·leetcode
赵钰老师19 分钟前
【R语言遥感技术】“R+遥感”的水环境综合评价方法
开发语言·数据分析·r语言
m0_7482448321 分钟前
StarRocks 排查单副本表
大数据·数据库·python
NiNg_1_23423 分钟前
Hadoop中MapReduce过程中Shuffle过程实现自定义排序
大数据·hadoop·mapreduce
V+zmm1013425 分钟前
基于微信小程序的乡村政务服务系统springboot+论文源码调试讲解
java·微信小程序·小程序·毕业设计·ssm
就爱学编程27 分钟前
重生之我在异世界学编程之C语言小项目:通讯录
c语言·开发语言·数据结构·算法
B站计算机毕业设计超人27 分钟前
计算机毕业设计PySpark+Hadoop中国城市交通分析与预测 Python交通预测 Python交通可视化 客流量预测 交通大数据 机器学习 深度学习
大数据·人工智能·爬虫·python·机器学习·课程设计·数据可视化
沛沛老爹38 分钟前
什么是 DevOps 自动化?
大数据·ci/cd·自动化·自动化运维·devops
Oneforlove_twoforjob1 小时前
【Java基础面试题025】什么是Java的Integer缓存池?
java·开发语言·缓存