【文件IO】文件系统操作

news2024/11/27 8:31:14

文章目录

  • 基本操作概述
  • 1. 文件属性
  • 2. 文件构造方法
  • 3. 文件方法
    • 1. 文件创建
    • 2. 文件删除
    • 3. 查看目录下所有的文件名
    • 4. 遍历目录
    • 5. 创建目录
    • 5. 目录重命名

基本操作概述

  • 创建文件
  • 删除文件
  • 创建目录
  • 重命名文件
  • 判定文件存在…

Java 中,提供了一个 File 类,进行文件系统操作,这个对象会使用“路径”进行初始化,从而表示一个具体的文件(这个文件可以存在,也可以不存在)
再基于这个对象进行后续操作


1. 文件属性

属性: 文件路径的分隔符

修饰符及类型属性说明
static StringpathSeparator依赖于系统的路径分隔符,String 类型的表⽰
static charpathSeparator依赖于系统的路径分隔符,char 类型的表⽰

2. 文件构造方法

构造方法:

签名说明
File (File parent, String child)根据⽗⽬录 + 孩⼦⽂件路径,创建⼀个新的 File 实例
File (String pathname)根据⽂件路径创建⼀个新的 File 实例,路径可以是绝对路径或者相对路径
File (String parent, String child)根据⽗⽬录 + 孩⼦⽂件路径,创建⼀个新的 File 实例,⽗⽬录⽤路径表⽰
此处写相对路径的时候,就需要明确基准目录是啥,代码中写的相对路径的基准目录取决于运行程序的方式
  1. 直接在 IDEA 中运行,此时的基准路径就是该项目所在的目录
  2. 再命令行中,通过 Java 命令来运行,此时基准路径就是 Java 命令所处的目录
  3. 某个程序可能是被其他进程调用的。进程 1 通过创建字进程的方式运行进程 2,进程 2 的基准路径就和进程 1 相同
  4. 代码执行过程中,还可以通过一些 API 修改基准路径,改成我们指定的某个路径

3. 文件方法

方法:

修饰符及返回值类型方法签名说明解释
StringgetParent()返回 File 对象的⽗⽬录⽂件路径获取文件所在的目录
C:\user\1
StringgetName()返回 FIle 对象的纯⽂件名称获取文件名
test.txt
StringgetPath()返回 File 对象的⽂件路径获取当前文件所在的目录+当前文件名
C:\user\1\text.txt
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()判断⽤⼾是否对⽂件有可写权限判断写权限

  • 一定要使用双反斜杠表示 \
File file = new File("D:\\My Computer\\02 Stricky\\02 Code\\03 IDEA");
import java.io.File;  
import java.io.IOException;  
  
public class Demo1 {  
    public static void main(String[] args) throws IOException {  
        File file = new File("D:\\My Computer\\02 Stricky\\02 Code\\03 IDEA\\text.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.getCanonicalFile());  //修饰过的绝对路径
    }
}

//运行结果
D:\My Computer\02 Stricky\02 Code\03 IDEA
text.txt
D:\My Computer\02 Stricky\02 Code\03 IDEA\text.txt
D:\My Computer\02 Stricky\02 Code\03 IDEA\text.txt
D:\My Computer\02 Stricky\02 Code\03 IDEA\text.txt

我们可以发现,最后三个路径没区别

  • 因为我们针对 file 对象构造的时候,是拿绝对路径进行构造的,所以此时的 Path 就是一个绝对路径,于是三个 getPath 就都是一样的

相对路径的基准不是固定的,此时我们通过 IDEA 运行程序,基准路径就是 IDEA 打开的这个项目所在的路径

import java.io.File;  
import java.io.IOException;  
  
public class Demo1 {  
    public static void main(String[] args) throws IOException {  
        File file1 = new File(".\\text.txt");  
        System.out.println(file1.getParent());  
        System.out.println(file1.getName());  
        System.out.println(file1.getPath());  
        System.out.println(file1.getAbsolutePath());  
        System.out.println(file1.getCanonicalFile());  
        System.out.println("======================");  
  
        File file2 = new File("..\\text.txt");  
        System.out.println(file1.getParent());  
        System.out.println(file1.getName());  
        System.out.println(file1.getPath());  
        System.out.println(file1.getAbsolutePath());  
        System.out.println(file1.getCanonicalFile());  
    }
}

//运行结果
.
text.txt
.\text.txt
D:\My Computer\02 Stricky\02 Code\03 IDEA\Gitee\java_code\240812-IO\.\text.txt
D:\My Computer\02 Stricky\02 Code\03 IDEA\Gitee\java_code\240812-IO\text.txt
======================
.
text.txt
.\text.txt
D:\My Computer\02 Stricky\02 Code\03 IDEA\Gitee\java_code\240812-IO\.\text.txt
D:\My Computer\02 Stricky\02 Code\03 IDEA\Gitee\java_code\240812-IO\text.txt

  • 修饰过的绝对路径就是把多余的部分去掉了
  • . 就是当前目录,.. 是代表忽略掉上一级目录

1. 文件创建

import java.io.File;  
import java.io.IOException;  
  
public class Demo2 {  
    public static void main(String[] args) throws IOException {  
        File file = new File("./text1.txt");  
  
        boolean ok = file.createNewFile();  //创建新文件  
        System.out.println(ok);  //看文件创建是否成功
        System.out.println(file.exists());  //看文件是否存在  
        System.out.println(file.isFile());  //看文件是否是个普通文件  
        System.out.println(file.isDirectory()); //看文件是否是一个目录  
    }  
}

//运行结果
true
true
true
false

image.png|238

IOException
创建文件,很可能会抛出异常

  1. 硬盘空间不够了
  • 在工作中,非常普遍,尤其是服务器,存储很多数据,会记录很多日志,每天都会生成很多新的内容
  • 一般都需要定时清理硬盘,搭建报警
  1. 没有权限
  • 确保你有操作的权限,才能进行
  • 对于文件的操作,典型的就是两个(读/写)

2. 文件删除

import java.io.File;  
  
public class Demo3 {  
    public static void main(String[] args) {  
        File file = new File("./text1.txt");  
        boolean ok = file.delete();  
        System.out.println(ok);  
    }
}
//运行结果
true

image.png|151

  • 文件消失了
  • 还有一种是等待进程结束之后再进行删除的操作:deletOnExit(),存在的意义就是可以去构造一些“临时文件”
    • 比如使用 word 创建一个文档,打开“显示隐藏文件”,在你 word 文档的同级目录下,就有一个隐藏文件,名字带有一些奇怪符号,一旦你把现在编辑的文档关闭了,这个隐藏文件就消失了
    • 这个隐藏文件中保存了你当前正在修改的,还未真正保存的内容
    • 若程序异常关闭,临时文件就不会消失,就可以通过这个文件,还原出你正在编辑的内容

3. 查看目录下所有的文件名

import java.io.File;  
import java.util.Arrays;  
  
public class Demo4 {  
    public static void main(String[] args) {  
        File file = new File(".");  
        System.out.println(Arrays.toString(file.list()));  
    }
}
//运行结果
[.gitignore, .idea, 240812-IO.iml, out, src]
  • 如果直接使用 list/listFiles,只能看到当前目录中的内容
  • 如果想看到某个目录下所有的目录和文件,就需要递归来完成

4. 遍历目录

  • 若要完成递归操作就需要一个函数来辅助完成
    1. 首先判断是不是目录
    2. 用数组,列出当前目录中所包含的内容
import java.io.File;  
  
public class Demo5 {  
  
    private static void scan(File currentDir) {  
        //1.先判定是否是目录  
        if(!currentDir.isDirectory()){  
            return;  
        }  
        
        //2.列出当前目录中包含的内容  
        File[] files = currentDir.listFiles();  
        if(files == null || files.length == 0){  
            //不存在的路径 || 空目录  
            return;  
        }  
        
        //3.打印当前目录  
        System.out.println(currentDir.getAbsolutePath());  
  
        //4.遍历这里所有的内容,一次进行判断  
        for(File file : files) {  
            if(file.isFile()) {  
                //如果是普通文件,直接打印文件路径  
                System.out.println(file.getAbsolutePath());  
            }else {  
                //如果是空目录,就继续进行递归  
                scan(file);  
            }        
        }    
    }  
    
    public static void main(String[] args) {  
        File file = new File("./");  
        scan(file);  
    }
}

5. 创建目录

  • mkdir()
import java.io.File;  
  
public class Demo6 {  
    public static void main(String[] args) {  
        File f = new File("./abc");  
        boolean ok = f.mkdir();  
        System.out.println(ok);  
    }
}
//运行结果
true

image.png|287


  • mkdirs(),可以处理多级目录
import java.io.File;  
  
public class Demo6 {  
    public static void main(String[] args) {  
        File f = new File("./abc/def/hhh");  
        boolean ok = f.mkdirs();  
        System.out.println(ok);  
    }
}

image.png|211

5. 目录重命名

import java.io.File;  
  
public class Demo7 {  
    public static void main(String[] args) {  
        File srcFile = new File("./abc");  
        File desrFile = new File("./abc123");  
        boolean ok = srcFile.renameTo(desrFile);  
        System.out.println(ok);  
    }
}

image.png|529

  • 通过重命名操作,实现移动文件的效果
import java.io.File;  
  
public class Demo7 {  
    public static void main(String[] args) {  
        File srcFile = new File("./abc123/def");  
        File desrFile = new File("./def");  
        boolean ok = srcFile.renameTo(desrFile);  
        System.out.println(ok);  
    }}
  • 移动 文件,就是修改文件所在的路径,文件路径的修改,也可以视为一种
    image.png|363

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

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

相关文章

电商平台的推荐算法需要备案吗?

答案是肯定的! 政策要求: 根据我国《互联网信息服务算法推荐管理规定》(以下简称《规定》)第六条,具有舆论属性或社会动员能力的互联网信息服务,包括电商平台的推荐算法,需要进行备案。 电商平…

使用js和css 实现div旋转围绕圆分布排列

记录,以防忘记 围绕圆 import React, { useEffect } from react; import ./index.scoped.scss;const Test () > {const arr Array.from({ length: 28 }, (_, index) > index 1);useEffect(() > {const dayTotal arr.length;// 动态设置每个点的旋转角…

快速找出问题快件:批量查询与筛选技巧

在日常生活中,我们经常需要查询大量的快递信息。尤其在电商、物流等行业,快速、准确地查询和筛选快递信息至关重要。固乔快递查询助手是一款强大的工具,能帮助用户批量查询快递,并快速筛选出问题快件。下面我们将详细介绍如何使用…

opengl创建柱面和鱼眼重展uv

专业软件 先看一下专业软件 可以拉取很多的uv点 以下是使用 OpenGL 创建不规则面片并指定 UV 的一般步骤: 1 顶点数据准备 2 定义面片的顶点坐标。这些顶点构成了面片的形状。 3 为每个顶点指定对应的纹理坐标(UV)。 4 创建顶点缓冲区对象…

Springboot整合hutool验证码

在 Spring Boot 中&#xff0c;你可以将 Hutool 生成验证码的功能集成到 RESTful API 接口中。 依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.14</version> <!-- 使用最新版…

EF Core 索引器属性(Indexer property)场景及应用

EF Core 索引器属性&#xff08;Indexer property&#xff09;场景及应用 简介 EF Core 中的索引器属性&#xff08;Indexer Property&#xff09;是指通过一个特殊的属性来访问实体类中的数据&#xff0c;而不必明确声明实体属性。这种属性在一些动态或未预定义的场景中非常…

【Java算法专场】位运算(下)

目录 判定字符是否唯一 ​编辑 算法分析 算法步骤 算法代码 hash表 位运算 两整数之和 算法分析 算法步骤 算法代码 只出现一次的数字 II 算法分析 算法步骤 算法代码 只出现一次的数字 III 算法分析 算法步骤 算法代码 面试题 17.19. 消失的两个数字 算…

python 如何实现执行selenium自动化测试用例自动录屏?

做自动化测试已经好多年了&#xff0c;随着项目技术的正增长提升&#xff0c;我们也不断完善并提高自己的技术能力&#xff0c; 下面给大家分享一个 selenium 自动化执行测试用例的录屏功能。希望对大家有帮助&#xff01; 首先&#xff0c;我们为什么要执行自动化录屏功能呢…

TIOBE 8月编程排行榜出炉!Python 正在追赶 Java 的 TIOBE 指数记录

2024年8月的TIOBE编程语言排行榜出炉了&#xff01;对于开发者而言&#xff0c;这份排行榜不仅仅是编程语言的简单排序&#xff0c;更是行业趋势的风向标。而今年&#xff0c;Python的表现格外引人注目&#xff0c;它正在一步步逼近Java的TIOBE指数记录。让我们一起看看这两大编…

es的执行命令日志输出

1. 说明 最近项目对接es&#xff0c;使用的客户端为&#xff1a; <dependency><groupId>co.elastic.clients</groupId><artifactId>elasticsearch-java</artifactId><version>8.11.4</version></dependency>使用过程中希望能…

3-1 介绍及传感器(智能应用篇)

3-1 介绍及传感器&#xff08;智能应用篇&#xff09; 3-0 本章介绍3-1 传感器介绍 3-0 本章介绍 Arduino实际应用到生活中 科技创作给生活的乐趣与便利 前两部分内容为基础 太极创客官方网站 课程主角led Led蕴含丰富的科技知识 水立方&#xff0c;led 主机led 汽车le…

整理 酷炫 Flutter 开源UI框架 FAB

flutter_villains 灵活且易于使用的页面转换。 项目地址&#xff1a;https://github.com/Norbert515/flutter_villains 项目Demo&#xff1a;https://download.csdn.net/download/qq_36040764/89631324

前端开发攻略---一篇文章让你快速上手TypeScript

目录 1、TypeScript简介 2、为何需要TypeScript 2.1 今非昔比的JavaScript 2.2 JavaScript中的困扰 2.3 静态类型检查 3、编译TypeScript 3.1 命令行编译 3.2 自动化编译 4、类型声明 5、类型推断 6、类型总览 6.1 JavaScript中的数据类型 6.2 TypeScript中的数据类…

【模电笔记】——信号的运算和处理电路(含电压比较器)

tips&#xff1a;本章节的笔记已经打包到word文档里啦&#xff0c;建议大家下载文章顶部资源&#xff08;有时看不到是在审核中&#xff0c;等等就能下载了。手机端下载后里面的插图可能会乱&#xff0c;建议电脑下载&#xff0c;兼容性更好且易于观看&#xff09;&#xff0c;…

Python实战项目:天气数据爬取+数据可视化(完整代码)

一、选题的背景 随着人们对天气的关注逐渐增加&#xff0c;天气预报数据的获取与可视化成为了当今的热门话题&#xff0c;天气预报我们每天都会关注&#xff0c;天气情况会影响到我们日常的增减衣物、出行安排等。每天的气温、相对湿度、降水量以及风向风速是关注的焦点。通过…

搭建高可用OpenStack(Queen版)集群(十一)之OpenStack集成ceph服务

一、OpenStack集成ceph服务 一&#xff09;Openstack集成Ceph准备 1、OpenStack存储知识 1、OpenStack数据存储分类 Openstack环境中&#xff0c;数据存储可分为临时性存储与永久性存储。 临时性存储&#xff1a;主要由本地文件系统提供&#xff0c;并主要用于nova虚拟机的本地…

开放式耳机哪种好用又实用?五款爆火单品推荐

现在市面上的开放式耳机真的参差不齐&#xff0c;而且想要挑选到一款适合自己的开放式耳机&#xff0c;那真的很难&#xff0c;要做很多功课&#xff0c;现在购物就像是在大海捞针一样&#xff0c;所以我们该怎么挑选才能选到一款适合自己的开放式耳机呢&#xff1f;这个问题相…

数据库原理面试-核心概念-问题理解

目录 1.数据库、数据库系统与数据库管理系统 2.理解数据独立性 3.数据模型 4.模式、外模式和内模式 5.关系和关系数据库 6.主键与外键 7.SQL语言 8.索引与视图 9.数据库安全 10.数据库完整性 11.数据依赖和函数依赖 12.范式&#xff1f;三范式&#xff1f;为什么要遵…

Java基础11:JavaDoc生成文档

本节内容教学视频连接&#xff1a;https://www.bilibili.com/video/BV12J41137hu?p32&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5https://www.bilibili.com/video/BV12J41137hu?p32&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 1.什么是JavaDoc&#xff1f; Javado…

双向重发布实验

要求&#xff1a; 1. 如图搭建网络拓扑&#xff0c;所有路由器各自创建一个环回接 口&#xff0c;合理规划 IP 地址 2.R1-R2-R3-R4-R6 之间使用 OSPF 协议&#xff0c; R4-R5-R6 之间使用 RIP 协议 3.R1 环回重发布方式引入 OSPF 网络 4.R4/R6 上进行双点双向重发布 5. …