【JavaEE】文件操作

简介: 【JavaEE】文件操作

前言

文件是我们日常生活中使用非常广泛的,我们使用任何一个程序都离不开文件操作,这个文件不仅仅指平时可以看见的文件,就连我们的键盘和屏幕都可以看作是一个文件。可见文件操作的重要性,那么今天我将为大家分享关于Java 的文件操作。


什么是文件

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


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



树型结构组织和目录


在Linux中,文件系统的组织结构采用树形结构,也称为层级目录结构。整个文件系统只有一个根目录(/),所有的文件和目录都从根目录开始进行组织和管理。根目录下面可以有多个子目录,每个子目录又可以包含其他子目录和文件,这样就形成了一个树形的结构。


目录是用于组织和存储文件的容器,也可以理解为文件夹。目录可以包含其他目录和文件,从而形成了树形结构。在Linux中,所有的目录和文件都可以通过路径来唯一标识和查找。路径是从根目录开始,一直到具体文件或目录的完整路径。例如,路径“/home/user/Documents/file.txt”表示从根目录开始,进入home目录,再进入user目录,然后进入Documents目录,最后找到名为file.txt的文件。


Windows的文件系统也采用了类似的树形结构,称为文件夹树。每个磁盘分区或驱动器都有自己的根目录,称为根文件夹。根文件夹下面可以有多个子文件夹,每个子文件夹又可以包含其他子文件夹和文件,形成了一个树形的结构。



文件路径

文件路径是指在计算机文件系统中,从根目录开始到具体文件或目录的完整路径。文件路径用于唯一标识和查找文件或目录。


在Linux中,文件路径以斜杠(/)作为分隔符,从根目录开始一直到具体文件或目录。例如,路径“/home/user/Documents/file.txt”表示从根目录开始,进入home目录,再进入user目录,然后进入Documents目录,最后找到名为file.txt的文件。


在Windows中,文件路径以反斜杠(\)或正斜杠(/)作为分隔符,从根文件夹开始一直到具体文件或文件夹。例如,路径“C:\Users\UserName\Documents\file.txt”表示从C盘根文件夹开始,进入Users文件夹,再进入UserName文件夹,然后进入Documents文件夹,最后找到名为file.txt的文件。


虽然Windows下可以使用 \ 和 / 作为分隔符,但是我们还是习惯使用 / ,因为使用 \ 的话,有些情况下还需要做出转义操作。


文件路径可以分为绝对路径和相对路径。


绝对路径是从根目录或根文件夹开始到具体文件或目录的完整路径

相对路径是从当前工作目录开始到具体文件或目录的路径。

例如,在Linux中,如果当前工作目录是“/home/user”,那么相对路径“Documents/file.txt”表示进入Documents目录,找到名为file.txt的文件,这个文件的绝对路径就是“/home/user/Documents/file.txt”。


. 表示当前目录,. .表示当前目录的上一级目录

文件类型

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


文本文件和二进制文件是计算机中常见的两种文件类型,它们在编码方式、存储方式和用途等方面有所不同。


编码方式:文本文件是基于字符编码的文件,常见的编码有ASCII编码、UNICODE编码等。二进制文件是基于值编码的文件,由二进制数字0和1组成,不存在统一的字符编码。

存储方式:文本文件采用定长编码方式,每个字符占据固定的比特数,一般是8个比特或16个比特。二进制文件采用变长编码方式,由一组二进制数字0和1组成,多少个比特代表一个值由具体的应用决定。

用途:文本文件主要用于存储和处理文本数据,如文本编辑、排版、程序源代码等。二进制文件主要用于存储和处理二进制数据,如图像、音频、视频、可执行文件等。

文件扩展名:文本文件的扩展名一般是.txt、.doc、.docx等,而二进制文件的扩展名则根据具体的文件类型而定,如.jpg、.mp3、.avi等。

那么平时我们应如何判断某一文件是文本文件还是二进制文件呢?教大家一个简单的方法:我们的电脑上不是有记事本吗,将这个文件以记事本的形式打开,如果打开之后没有出现乱码,则是文本文件,如果出现了乱码则说明该文件为二进制文件。

这种就是二进制文件。

这种就是文本文件。


文件权限

文件权限是指在计算机文件系统中,对文件和目录的访问权限。通过对文件设定权限可以达到以下三种访问限制权限:

  1. 只允许用户自己访问;
  2. 允许一个预先指定的用户组中的用户访问;
  3. 允许系统中的任何用户访问。


在Linux中,文件权限分为读、写、执行三种,分别用字母r、w、x表示。每个文件或目录都有三组权限,分别对应文件所有者、同组用户和其他用户。例如,权限设置为“-rwx r-- r–”表示文件所有者具有读、写和执行的权限,同组用户和其他用户则只有读取的权限。


在Windows中,文件权限分为读取、写入、读取和执行、修改四种,分别用字母R、W、RX、M表示。每个文件或文件夹都有一组权限,可以针对不同的用户或用户组进行设置。例如,权限设置为“读取和执行”表示该用户或用户组可以读取和执行该文件,但不能写入或修改。


Java中的文件操作

在Java中操作文件需要用到 java.io.File 类中的方法来进行操作。

File 类的常见属性


这两个属性是用来表示系统的路径分隔符的。

File 类常见构造方法

File(File parent, Stringchild) 根据父目录 + 孩子文件路径,创建一个新的 File 实例
File(String pathname) 根据文件路径创建一个新的 File 实例,路径可以是绝对路径或者相对路径
File(String parent, Stringchild) 根据父目录 + 孩子文件路径,创建一个新的 File 实例,父目录用路径表示

这些常用构造方法中,第二种直接指定路径的方法是比较常用的。

File 类常用方法

修饰符及返回值类型 方法签名 说明
String getParent() 返回 File 对象的父目录文件路径
String getName() 返回 FIle 对象的纯文件名称
String getPath() 返回 File 对象的文件路径
String getAbsolutePath() 返回 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() 判断用户是否对文件有可写权限

示例一:

public class Test {
    public static void main(String[] args) throws IOException {
        File file = new File("d:/test.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());
    }
}

盘符不区分大小写

示例二:

public class Test2 {
    public static void main(String[] args) {
        File file = new File("d:/test.txt");
        System.out.println(file.exists());  //false
        System.out.println(file.isDirectory());  //false
        System.out.println(file.isFile());  //false
    }
}

在创建File对象的时候,如果该文件不存在,并不会自动创建出这个文件。

public class Test2 {
    public static void main(String[] args) throws IOException {
        File file = new File("d:/test.txt");
        System.out.println(file.exists());  //false
        System.out.println(file.isDirectory());  //false
        System.out.println(file.isFile());  //false
        //如果文件创建成功则返回true,创建失败返回false
        boolean ret = file.createNewFile();
        System.out.println(ret);  //true
        System.out.println(file.exists());  //true
        System.out.println(file.isDirectory());  //false
        System.out.println(file.isFile());  //true
        //如果删除文件成功,则返回true,删除失败则返回false
        ret = file.delete();
        System.out.println(ret);  //true
        System.out.println(file.exists());  //false
    }
}

示例三:

public class Test3 {
    public static void main(String[] args) throws IOException, InterruptedException {
        File file = new File("d:/test1.txt");
        boolean ret = file.createNewFile();
        System.out.println(ret);
        file.deleteOnExit();
        //让程序等待30秒再结束
        Thread.sleep(30000);
    }
}

使用 deleteOnExit(0 方法的时候,不会立刻删除该文件,而是会等 JVM 运行结束的时候才会删除该文件。

当程序运行结束之后,test1.txt 文件就被删除了

示例四:

public class Test4 {
    public static void main(String[] args) {
        File file = new File("D:/code/this-is-my-java-ee-learning");
        //list() 方法以字符串的形式返回指定目录下的所有文件夹/文件的名称
        String[] str = file.list();
        System.out.println(Arrays.toString(str));
    }
}

示例五:

public class Test5 {
    public static void main(String[] args) {
        File file = new File("D:/code/this-is-my-java-ee-learning");
        //listFiles() 方法以File对象的形式返回指定目录下的文件夹/文件的
        File[] files = file.listFiles();
        for (File f : files) {
            System.out.println(f.getName());
        }
    }
}

示例六:

public class Test6 {
    public static void main(String[] args) {
        File file = new File("d:/aaa");
        //mkdir() 方法创建目录
        boolean ret = file.mkdir();
        System.out.println(ret);
    }
}

mkdir() 方法只能创建出一级目录,不能创建出多级目录。

public class Test6 {
    public static void main(String[] args) {
        File file = new File("d:/aaa/bbb/ccc");
        boolean ret = file.mkdir();
        System.out.println(ret);
    }
}

要想创建出多级目录就需要使用 mkdirs() 方法。

public class Test6 {
    public static void main(String[] args) {
        File file = new File("d:/aaa/bbb/ccc");
        boolean ret = file.mkdirs();
        System.out.println(ret);
    }
}

示例七:

public class Test7 {
    public static void main(String[] args) throws IOException {
        File src = new File("d:/test.txt");
        boolean ret = src.createNewFile();
        System.out.println(ret);
        File des = new File("d:/test1.txt");
        ret = src.renameTo(des);
        System.out.println(ret);
    }
}

示例八:

public class Test8 {
    public static void main(String[] args) throws IOException {
        File file = new File("d:/test.txt");
        boolean ret = file.createNewFile();
        System.out.println(file.canRead());  //true
        System.out.println(file.canWrite());  //true
    }
}


相关文章
|
传感器 机器学习/深度学习 自动驾驶
无人驾驶中常用的37个数据集以及每个数据集的亮点
我们在写论文的时候,经常会用到数据集.以下是我的一些整理.
|
Java 应用服务中间件 API
如何利用Idea创建一个Servlet项目(新手向)(上)
如何利用Idea创建一个Servlet项目(新手向)
849 0
|
Java Apache
如何用 Java 实现 word、excel 等文档在线预览?
java实现办公文件在线预览功能是一个大家在工作中也许会遇到的需求,网上些公司专门提供这样的服务,不过需要收费 如果想要免费的,可以用openoffice,实现原理就是:
|
Java 应用服务中间件 Android开发
无法解析javax.servlet的解决方法
无法解析javax.servlet的解决方法
5018 0
无法解析javax.servlet的解决方法
|
前端开发 easyexcel Java
Java+EasyExcel实现文件导入导出,导入导出如此简单
项目中需要Excel文件的导入与导出Excel并下载,例如,导入员工信息,导出员工信息,手动输入比较繁琐,所以本篇博文教大家如何在Java中导入Excel文件与导出Excel文件
15578 3
Java+EasyExcel实现文件导入导出,导入导出如此简单
|
SQL 消息中间件 分布式计算
大数据-130 - Flink CEP 详解 - CEP开发流程 与 案例实践:恶意登录检测实现
大数据-130 - Flink CEP 详解 - CEP开发流程 与 案例实践:恶意登录检测实现
336 0
|
Java API
Java文件处理完全指南:创建、读取、写入和删除文件详细解析
Java的文件处理非常灵活和强大。通过上述代码示例,我们可以清楚地理解在Java中如何高效地进行文件的创建、读取、写入和删除操作。值得注意的是,文件操作时我们常常会用到一些流(Stream)和读写字符的类,在操作完成之后,应当及时关闭这些资源,这可以通过使用try-with-resources语句来自动完成。这种方法不仅代码简洁,还能有效防止资源泄漏。总体而言,熟练掌握Java文件处理对于开发实用、健壮的应用程序至关重要。
769 1
|
安全 Java API
Java根据URL获取文件内容的实现方法
此示例展示了如何安全、有效地根据URL获取文件内容。它不仅展现了处理网络资源的基本技巧,还体现了良好的异常处理实践。在实际开发中,根据项目需求,你可能还需要添加额外的功能,如设置连接超时、处理HTTP响应码等。
938 4
|
easyexcel Java 关系型数据库
阿里巴巴-EasyExcel 基于Java的简单、省内存的读写Excel
该文章主要介绍了在Java应用中如何使用EasyExcel技术完成对Excel文件的导入和导出操作,包括环境搭建、基本概念、快速入门、进阶操作和综合应用等内容,并提供了相关代码示例和注意事项。
 阿里巴巴-EasyExcel 基于Java的简单、省内存的读写Excel
|
JSON Java 数据格式
response.contenttype详解
response.contenttype详解