【JavaEE】文件操作

news2024/11/18 10:24:02

在这里插入图片描述

文章目录

  • 前言
  • 什么是文件
  • 树型结构组织和目录
  • 文件路径
  • 文件类型
  • 文件权限
  • Java中的文件操作
    • File 类的常见属性
    • File 类常见构造方法
    • File 类常用方法

前言

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

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

示例一:

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
    }
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【java学习】变量的分类:成员变量与局部变量(16)

变量的分类 1. 基本概念2. 成员变量3. 局部变量4. 成员变量(属性)和局部变量的区别 1. 基本概念 概念: 在方法体外,类体内声明的变量称为成员变量。在方法体内部声明的变量称为局部变量。 2. 成员变量 实例变量:在类实例化成对象才能使用 …

多线程 - 线程池

线程池 相关的背景知识 线程池存在的意义: 使用进程来实现并发编程,效率太低了,任务太重了,为了提高效率,此时就引入了线程,线程也叫做“轻量级进程”,创建线程比创建进程更高效;销毁线程比销毁进程更高效;调度线程比调度进程更高效…此时,使用多线程就可以在很多时候代替进程…

在美国如何申请批准销售儿童玩具?提交哪些相关文件?需要的认证是?

在美国如何申请批准销售儿童玩具?提交哪些相关文件?需要的认证是?ASTM F963-17 ​在美国销售玩具 重要: 如果您要在亚马逊商城销售商品,则必须遵守适用于这些商品和商品信息的所有联邦、州和地方法律以及亚马逊政策。…

dockerfile lnmp 搭建wordpress、docker-compose搭建wordpress

-----------------安装 Docker--------------------------- 目前 Docker 只能支持 64 位系统。systemctl stop firewalld.service setenforce 0#安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2 --------------------------------------------------…

什么是信创测试?信创测试工具有哪些?

信创全称是“信息技术应用创新”,旨在实现信息技术自主可控,规避外部技术制裁和风险,其涉及产业链包括硬件、基础软件、应用软件、云服务、数据安全等领域。 信创测试是指对信创工程项目中的产品、系统等进行测试和验证,以确保其…

【B/S架构】医院不良事件报告系统源码

医院不良事件报告系统为医院内质量控制、患者安全关注、医疗安全不良事件方面的精细化的管理提供了平台,是等级医院评审的必备内容,评审要求医院直报系统要与卫生部“医疗安全(不良)事件报告系统”建立网络对接。 不良事件报告系统源码包括护理相关事件、…

写一个名为Rectangle的类表示矩形

如何使用Rectangle类计算矩形的面积 要求:其属性包括宽width、高height和颜色color,访问权限分别为private,width和height都是double型的,而color则是String类型的。要求该类提供计算面积的方法getArea()方法,以及修改…

Node.js 做 Web 后端的优势在哪?为什么是明智的选择?

当我们谈论构建强大的Web应用程序时,选择适当的后端技术至关重要。在如今的技术领域中,Node.js已经崭露头角,并且越来越多的开发者和企业选择将其作为首选的后端开发工具。但是,Node.js究竟有哪些优势,使得它成为众多开…

WMS仓储管理系统的盘点功能解析

随着电商行业的快速发展,仓储管理在企业的运营中扮演着越来越重要的角色。为了提高仓库的运营效率和管理水平,许多企业引入了WMS仓储管理系统。本文将对WMS仓储管理系统的盘点功能进行解析,探讨其在实际应用中的价值。 一、WMS仓储管理系统概…

【分享】影刀使用xpath捕获指定的元素

xpath捕获元素比较精准,前面也介绍了xpath的用法 现在捕获社区里帖子详情页的标题 //*[class‘discuss_detail_header___3LhnQ’]/h1 找到class是discuss_detail_header___3LhnQ的子元素h1 获取文章内容 //*[id‘w-e-textarea-1’] 找到id是w-e-textarea-1的元…

这短短 6 行代码你能数出几个bug?

前言:本文仅仅只是分享笔者一年前见到的诡异代码,大家可以看看乐子,随便数一数一共有多少个bug,这数bug多少还是要点水平的 在初学编程的时候,写的第一个代码大多都是 hello world,可是就算是 hello world…

如何使用CSS和JavaScript实施暗模式?

近年来,暗模式作为用户界面选项备受追捧。它提供了更暗的背景和更亮的文本,不仅可以减轻眼睛疲劳,还可以节省电池续航时间,尤其是在OLED屏幕上。 不妨了解如何结合使用CSS和JavaScript为网站和Web应用程序添加暗模式选项。 了解暗…

因果图测试用例设计方法介绍(超全的总结笔记错过就没有了)

前言 为什么需要测试用例 测试的目的是在有限的资源下,尽可能多的找出系统的缺陷。这就要求在测试中,尽可能完全的走完系统的所有流程,保证所有的分支都经过测试。 而测试过程是由人来执行的,不可能避免的会遗漏一些应该测试内容…

新增TOP!10月SCI/SSCI/EI刊源表已更新!

2023年10月SCI/SSCI/EI期刊目录更新 2023年10月份刊源表已更新!计算机领域新增TOP期刊、SSCI、EI新增多本好刊,重点期刊如下,相关领域作者注意投稿截止时间! 01 计算机领域 02 医学与制药领域 03 工程综合领域 04 环境生物化学地…

uniapp实现扫一扫功能,扫码成功后跳转页面

uniapp官方有提供的相关api实现跳转到web网页(h5)的功能,在开发小程序中,是一项很常见的功能开发。该功能使用到的api uni.scanCode 详细步骤如下: 1.在ui库中找到扫码icon,以uViewUI为例 绑定点击事件@click <u-icon class="scanIcon" name="scan…

Maven 项目文档

本章节我们主要学习如何创建 Maven 项目文档。 比如我们在 C:/MVN 目录下&#xff0c;创建了 consumerBanking 项目&#xff0c;Maven 使用下面的命令来快速创建 java 项目&#xff1a; mvn archetype:generate -DgroupIdcom.companyname.bank -DartifactIdconsumerBanking -…

含冰蓄冷空调的冷热电联供型微网多时间尺度优化调度

MATLAB代码&#xff1a;含冰蓄冷空调的冷热电联供型微网多时间尺度优化调度 关键词&#xff1a;冰蓄冷空调 CCHP-MG 多时间尺度优化 冷热电联供 参考文档&#xff1a;《含冰蓄冷空调的冷热电联供型微网多时间尺度优化调度》完全复现 仿真平台&#xff1a;MATLAB yalmipcplex…

PowerShell install 一键部署hfish

hfish前言 HFish是一款社区型免费蜜罐,侧重企业安全场景,从内网失陷检测、外网威胁感知、威胁情报生产三个场景出发,为用户提供可独立操作且实用的功能,通过安全、敏捷、可靠的中低交互蜜罐增加用户在失陷感知和威胁情报领域的能力。 HFish具有超过40种蜜罐环境、提供免费…

修改了windows dns配置,在wsl2中不生效

本地做测试环境&#xff0c;需要劫持dns解析&#xff0c;所以在本地搭dns解析服务&#xff0c;用来劫持域名解析流量&#xff0c;需要将本地dns服务器地址配到127.0.0.1&#xff0c;如图&#xff0c;但是 wsl 中&#xff0c;却没有变化&#xff0c;依然是原来的dns&#xff0c;…

Unity基础课程之物理引擎3-碰撞检测案例-吃金币并加分显在UI文本框上

业务逻辑&#x1f4bc;&#xff1a; 这个脚本的主要功能是用于显示和更新主角的得分。在游戏中&#xff0c;玩家需要吃到金币来增加分数&#xff0c;而这个脚本就是负责将得分的变化实时显示在屏幕上的。 程序逻辑&#x1f4bb;&#xff1a; 1️⃣首先&#xff0c;在脚本的开始…