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

2023-12-13 18:21:20

目录

一、文件的概念

二、文件系统

三、文件类型

四、使用 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 -- 流对象操作文件内容》

链接生成中..........

文章来源:https://blog.csdn.net/zzy734437202/article/details/134962409
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。