当前位置: 首页 > news >正文

【JavaEE初阶】文件操作 和 IO (上篇)

☕导航小助手☕

     🍚写在前面

          🍣一、文件

               🍛🍛1.1 文件的概念

               🦪🦪1.2 文件的路径

          🍜二、 Java中文件系统操作

               🍱🍱2.1 File类的属性

               🥡🥡2.2 File类的构造方法

               🍰🍰2.3 File类的方法

                          🍤🍤🍤2.3.1 File类的常用获取方法

                          🧀🧀🧀2.3.2 File类的常用判断方法

                          🍔🍔🍔2.3.3 文件的创建与删除

                          🧇🧇🧇2.3.4 其他的常用方法

               🥣🥣2.4 代码示例演示

                          🥩🥩🥩2.4.1 演示一:演示File类的一些常见用法

                          🥮🥮🥮2.4.2 演示二:文件的创建及其相关属性

                          🍲🍲🍲2.4.3 演示三:文件的删除

                          🍗🍗🍗2.4.4 演示四:创建目录

                          🍖🍖🍖2.4.5 演示五:文件重命名


写在前面

在本篇博客中,将主要介绍 的时文件的概念、文件的路径、Java中 文件系统的操作(主要介绍 File类 的各种属性与方法)~

另外,为了防止产生视觉疲劳,这块内容将分为上篇、下篇 两篇博客来介绍 ~

 

一、文件

1.1 文件的概念

我们平时所说的文件,一般都是存储在计算机硬件上面的文件,可以是 文本文档、图片、程序等等,一般是以 .jpg  .txt .mp3 、 .mp4 .pptx 等文件格式 ~

而在计算机中的概念,目录(也就是 文件夹)也是文件的一种,称为 目录文件 ~ 

 

1.2 文件的路径

文件的路径 一般分为两种:一种是 绝对路径,一种是相对路径 ~

绝对路径:以盘符开头 的路径 ~

相对路径: . 或者 .. 开头的 路径,需要先明确一个基准路径,来找到目标的目录 ~

目录和目录之间,可以用 \ 分割,也可以使用 / 分割;

但是更推荐使用 / 的,因为 \ 在字符串里面表示 转义字符,要想表示分割,就需要 \\,还不如直接用 / 来的更好 !!!


来列举一个例子,以帮助大家更好的理解 绝对路径 和 相对路径 ~

假设 A同学 想要去图书馆看书,但是由于学校非常的大,绕来绕去的就把 A同学 绕晕了 ~

此时,A同学看到 学校大门口旁边有个 警卫,于是就跑过去问路 ~

那么,此时 绝对路径 的内容都是固定的,无论 A同学在哪里,这条路经都是不变的 ~

而所谓的相对路径,其实就是相对的(以 A同学自身的位置为基准的):

当 A同学在校门口的时候,相对路径就是

当 A同学在躬行楼的时候,相对路径就是

 当 A同学在行知广场的时候,相对路径就是


在使用 Idea 运行程序的时候,当前的工作目录(取为基准路径)就是项目所在的目录 ~

二、 Java中文件系统操作

在之前所介绍过的 冯诺依曼体系结构中,我们已经知道,文件是存储在硬盘上的!

复习一下:硬盘(外存) 和 内存的 4 个区别(重点掌握):

  1. 内存存储空间小,硬盘存储空间大
  2. 内存访问速度快,硬盘访问速度慢
  3. 内存成本高,硬盘成本低
  4. 内存掉电数据丢失,硬盘掉电数据还在

文件也是被操作系统所管理,在操作系统内核中 有一个专门的模块 —— 文件系统(大概会以某种方式来管理硬盘上的文件) ~

在 Java 中针对 文件系统/文件 进行了一系列的封装,我们可以根据 Java API 对文件进行一些操作,专门提供了 File类,以表示一个文件 ~

然后,就可以基于 File类,来完成一些关于文件的操作 ~

2.1 File类的属性

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

分隔符是 / 还是 \ ,暂时不需要纠结,因为平常我们暂时用不到 ~

 

2.2 File类的构造方法

构造方法说明
File (File parent,String  child)根据父目录 + 孩子文件路径,创建一个新的 File实例
File (String pathname)根据文件路径 创建一个新的 File实例,路径可以是绝对路径 也可以是相对路径
File (String parent,String  child)根据父目录 + 孩子文件路径,创建一个新的 File实例,父目录用路径表示

我们可以通过 构造方法 来基于一个路径,构造出一个文件 ~ 

 

2.3 File类的方法

2.3.1 File类的常用获取方法

修饰符及返回值类型方法说明
StringgetParent()返回 File对象 的父目录文件路径
StringgetName()返回 File对象 的纯文件名称
StringgetPath()返回 File对象 的文件路径
StringgetAbsolutePath()返回 File对象 的绝对路径
StringgetCanonicalPath()返回 File对象 的修饰过的绝对路径

2.3.2 File类的常用判断方法

修饰符及返回值类型方法说明
booleanexists()判断 File对象 描述的文件是否真实存在
booleanisDirectory()

判断 File对象 代表的文件是否是一个目录

booleanisAbsolute()

判断 File对象 代表的文件是否是绝对路径

booleanisFile()判断 File对象 代表的文件是否是一个普通文件
booleancanRead()判断用户是否对文件有可读权限
booleancanWrite()判断用户是否对文件有可写权限

2.3.3 文件的创建与删除

修饰符及返回值类型方法说明
booleancreateNewFile()根据 File对象,自动创建一个空文件,成功创建后返回 true
booleandelete()根据 File对象,删除该文件,成功删除后返回 true
voiddeleteOnExit()根据 File对象,标注文件将被删除,删除动作会到 JVM 运行结束时才会进行
booleanmkdir()创建 File对象 代表的目录(单行目录)
booleanmkdirs()

创建 File对象 代表的目录(多行目录)

2.3.4 其他的常用方法

修饰符及返回值类型方法说明
String[ ]list()返回 File对象 代表的目录下的 所有文件名
File[ ]listFiles()返回 File对象 代表的目录下的所有文件,以 File对象表示
booleanrename(File dest)进行文件重命名

2.4 代码示例演示

2.4.1 演示一:演示File类的一些常见用法

package file;

import java.io.File;
import java.io.IOException;

//演示 file类 的一些常见用法
public class Demo1 {
    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());
    }
}

运行结果:


 

package file;

import java.io.File;
import java.io.IOException;

//演示 file类 的一些常见用法
public class Demo1 {
    public static void main(String[] args) throws IOException {
        File file = new File("./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());
    }
}

 运行结果:

2.4.2 演示二:文件的创建及其相关属性

package file;

import java.io.File;
import java.io.IOException;

public class Demo2 {
    public static void main(String[] args) throws IOException {
        //前面没有写 ./ ,但是也相当于是 相对路径,即 相当于是有 ./ (./ 可以省略)
        File file = new File("HelloWorld.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());
    }
}

 运行结果:


 此时,我们可以看见,程序运行结束后,创建了一个新的文件:

同时,当找到绝对路径去观察时,就会发现真的创建了一个文件:

2.4.3 演示三:文件的删除

第一种删除方法:delete 方法(直接删除)

package file;

import java.io.File;

public class Demo3 {
    public static void main(String[] args) {
        //文件删除
        File file = new File("HelloWorld.txt");
        file.delete();
        System.out.println(file.exists());
    }
}

运行结果:

我们可以看见,"HelloWorld.txt"文件就真的被删除了 ~

打开绝对路径的时候,文件确实被删除了 ~


第二种删除方法:deleteOnExit 方法(程序退出之后再删除,可以用来创建一些临时文件)

偷偷摸摸的又运行了一下 Demo2,以创建出文件 ~

我们可以看见,当运行到打印 文件是否存在 的时候,仍然是文件存在的 ~

当程序运行结束之后,文件才不存在被删除了 ~

同时,当打开绝对路径的时候,确实发现文件没有了 ~  

 

2.4.4 演示四:创建目录

如果我们创建的是单级目录的话,可以使用 mkdir 方法:

package file;

import java.io.File;

public class Demo4 {
    //创建目录
    public static void main(String[] args) {
        File file = new File("test");
        System.out.println(file.exists());
        System.out.println(file.isDirectory());
        System.out.println("---------------------");
        file.mkdir();
        System.out.println(file.exists());
        System.out.println(file.isDirectory());
    }
}

运行结果:

此时,可以观察到左边,真的创建了一个目录:

当打开绝对路径去观察时,也会发现真的出现了一个目录(文件夹):


当我们想要创建的是多级目录时,使用的就需要是 mkdirs 方法(如果继续使用 mkdir 方法,就会发现它是错误的)~

package file;

import java.io.File;

public class Demo4 {
    //创建目录
    public static void main(String[] args) {
        File file = new File("test/aa/1");
        System.out.println(file.exists());
        System.out.println(file.isDirectory());
        System.out.println("---------------------");
        //file.mkdir();
        //创建多级目录的时候需要用的是 mkdirs 方法
        file.mkdirs();
        System.out.println(file.exists());
        System.out.println(file.isDirectory());
    }
}

 运行结果:

同时,可以观察到左边创建了目录:

当打开绝对路径去观察时,也会发现创建了多级目录:

2.4.5 演示五:文件重命名

package file;

import java.io.File;

public class Demo5 {
    //文件重命名
    public static void main(String[] args) {
        File file1 = new File("./test1.txt");
        File file2 = new File("./test2.txt");
        file1.renameTo(file2);
    }
}

运行结果:

我们可以很清楚的看见,文件名 test1.txt 运行程序之后,重命名为了 test2.txt ~

好了,关于 文件操作和IO 的上半篇的内容就介绍到这里了,下半篇的内容就留到下一篇博客来介绍 ~

如果感觉这一篇博客对你有帮助的话,可以一键三连走一波,非常非常感谢啦 ~

 

相关文章:

  • Spring教程-01-IOC控制反转
  • Spring Cloud Gateway过滤器配置
  • Tomcat服务
  • REDIS05_SpringBoot整合redis、RedisTemplate操作各个基本类型、工具类的抽取
  • Sentinel的安装与配置
  • 生命周期函数
  • Go语言学习笔记——正则表达式
  • 无线传感器网络数据压缩与融合及安全机制的matlab仿真
  • 【C++】红黑树的性质以及实现
  • 软件测试 -- 入门 4 软件测试原则
  • java毕业设计慢性病管理mybatis+源码+调试部署+系统+数据库+lw
  • java毕业设计旅游攻略开发系统mybatis+源码+调试部署+系统+数据库+lw
  • 工具篇 | 07 | maven
  • 数据结构——线性表之顺序表
  • 推荐一下我使用的开发工具
  • 《深入 React 技术栈》
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • canvas 五子棋游戏
  • Objective-C 中关联引用的概念
  • rabbitmq延迟消息示例
  • React Transition Group -- Transition 组件
  • vue数据传递--我有特殊的实现技巧
  • 笨办法学C 练习34:动态数组
  • 开源地图数据可视化库——mapnik
  • 力扣(LeetCode)22
  • 目录与文件属性:编写ls
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 排序(1):冒泡排序
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 小程序01:wepy框架整合iview webapp UI
  • 小程序开发之路(一)
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 正则表达式
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • gunicorn工作原理
  • Java数据解析之JSON
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • (¥1011)-(一千零一拾一元整)输出
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (第二周)效能测试
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • ***测试-HTTP方法
  • ***监测系统的构建(chkrootkit )
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • ... 是什么 ?... 有什么用处?
  • .NET Core 中插件式开发实现
  • .NET Core引入性能分析引导优化