【JavaEE初阶系列】——文件操作 IO 之 文件系统操作

目录

📝认识文件

🚩树型结构组织 和 目录

🎈绝对路径和相对路径

🚩文件类型

📝文件系统操作

🎈File 概述

🎈File类的使用

1. 绝对路径 vs 相对路径

2. 路径分隔符

3. 静态成员变量

4. 常用构造器

5. 常用方法

5.1 获取功能

5.1.1 getParent()

 5.1.2 getName()

5.1.3 getPath()

5.1.4 getAbsolutePath()和getCanonicalPath()

5.2判断功能

5.2.1 exists()

5.2.2 isDirectory()和isFile()

5.2.3 canRead()和canWrite() 以及isHidden()

 5.3 创建功能

5.3.1  createNewFile()

5.3.2  mkdir()和mkdirs()

5.4 删除功能

5.4.1 delete()

5.4.2 deleteOnExit() 

5.5 查看功能

5.5.1 list() 

5.5.2 listFiles() 

5.6 更改功能 

5.6.1 renameTo()

📝强化练习

🎈 显示文件及文件夹内容

🎈统计文件夹大小


📝认识文件

所谓的"文件"是一个广义的概念,可以代表很多的东西。

操作系统里,会把很多的 硬件设备 和 软件资源 都抽象成 "文件",统一进行管理。

但是大部分情况下,谈到的文件,都是指硬盘的文件。

文件就相当于是针对 "硬盘" 数据的一种抽象。

我们先来认识狭义上的文件 (file) 。针对硬盘这种持久化存储的 I/O 设备,当我们想要进行数据保存时,往往不是保存成一个整体,而是独立成一个个的单位进行保存,这个独立的单位就被抽象成文件的概念,就类似办公桌上的一份份真实的文件一般。
文件除了有数据内容之外,还有一部分信息,例如文件名、文件类型、文件大小等并不作为文件的数据而存在,我们把这部分信息可以视为文件的元信息。
每个文件都有属于它自己的,不是内容的一些信息。

🚩树型结构组织 和 目录

同时,随着文件越来越多,对文件的系统管理也被提上了日程,如何进行文件的组织呢,一种合乎自然的想法出现了,就是按照 层级结构进行组织 —— 也就是我们数据结构中学习过的树形结构。 这样,一种专门用来存放管理信息的特殊文件诞生了,也就是我们平时所谓文件夹(folder) 或者目录 (directory) 的概念
对于我们很多人来说说“文件”,但是对于程序员来说"目录(Directory)",这才是专业的叫法。
我们所看到的(此电脑)标识其实是目录树的根节点。此电脑下面有CDE盘。总共是500G硬盘。(每个电脑分布的盘是不一样的,有些只有一个C盘,有些只有一个D盘等等)。

将目录点进去,可以看到还包含其他的目录/文件。

这样我们可以使用 目录的 层次结构来描述,文件所在的为止 “路径”。

D:\git\java_repository 形如这样的一个字符串,体现出了当前文件在哪个目录中。可以通过文件路径,来确定当前文件具体所在的位置了。


🎈绝对路径和相对路径

  • 绝对路径:是以C: D: 盘符开头的,这种路径称为"绝对路径"
  • 相对路径:需要先指定一个目录,作为基准目录,从基准目录出发,看看沿着啥样的路线能够找到指定文件,此时涉及到的路径就是“相对路径“,往往是以.(当前目录)或者..(当前目录的上一级)开头的

1》假设当前的基准目录就是  D:\git\乐乐的二号仓库

     .\test.txt   (./表示当前目录)

2》假设当前的基准目录是  D:\git

    .\乐乐的二号仓库\test.txt     (在下一路径的里面)

 3》假设当前的基准目录是 D:\git\乐乐的二号仓库\111

此时的test.txt文本在111目录的上一级:    ..\test.txt    (..\表示上一个路径)
如果是命令行进行操作,基准目录,就是你当前所处的目录。                      
对于IDEA来说,基准目录就是项目目录。                                                                                  D:\git\java_repository\java-repository\JavaEE_Improve\File_test (项目目录就是File_test)


🚩文件类型

从编程的角度看,文件类型,主要就是俩大类
  • 文本(文件中保存的数据,都是字符串,保存的内容都是合法的字符
  • 二进制 (文件中保存的数据,仅仅是二进制数据.不要求保存的内容是 合法的字符

什么是 合法的字符??——字符集/字符编码

utf8有一个大的表格,就列出了什么字符,对应到什么编码

如果你的文件是utf8编码的,此时文件中的每个数据都是合法的utf8编码的字符,就可以认为这个文本是文本文件了。如果存在一些不是utf8合法字符的情况下,就是二进制了。

本身计算机存储的数据都是二进制的

如何判定一个文件是文本还是二进制?

就直接使用记事本,打开这个文件,如果打开之后,乱码,文件就是二进制,否则就是文本。

很多文件都是二进制的,docx,pptx...都属于二进制的。区分文本和二进制,是很重要的!!写代码的时候,文本文件和二进制文件,代码编写的方式是不同的。


上述我们讲述了文件系统利用树形结构来组织文件,以及路径分为绝对路径和相对路径。
文件都是从两方面入手: 文件系统操作和文件内容操作
  • 文件系统操作:比如删除、创建、重命名文件等等

  • 文件内容操作:流对象 (读和写文件)也就是对文件里面的内容增删查改等操作。

📝文件系统操作

本节内容中,我们主要涉及文件的元信息、路径的操作,暂时不涉及关于文件中内容的读写操作。
Java 中通过 java.io.File 类来对一个文件(包括目录)进行抽象的描述。注意,有 File 对象,并不
代表真实存在该文件。

🎈File 概述

  • 1) java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关
  • 2)File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,并未涉及到写入或读取文件内容的操作。如果需要读取或写入文件内容,必须使用IO流来完成。
  • 3) 想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。
  • 4) File对象可以作为参数传递给流的构造器,指明读取或写入的"终点"。

🎈File类的使用

1. 绝对路径 vs 相对路径

(1)绝对路径:是一个固定的路径,从盘符开始
(2)相对路径:是相对于某个位置开始

2. 路径分隔符

pathSeparator就是路径分隔符 D:\project\test  其中\就是pathSeparator

(1) 路径中的每级目录之间用一个路径分隔符隔开。

(2)路径分隔符和系统有关:

  • windowsDOS系统默认使用"\"来表示
  • UNIX和URL使用"/"来表示

我们知道再编程的时候会有转义字符出现  除非用\\才可以。所以我们更喜欢用 /.

(3) Java程序支持跨平台运行,因此路径分隔符要慎用。
为了解决这个隐患,File类提供了一个常量:
public static final String separator:根据操作系统,动态的提供分隔符。

  • windows 相当于 \ 
  • linux/Mac 相当于 /   

利用这个变量可以自动的提供分隔符。而不担心弄错。

   File file=new File("E:/4_4/test.txt");System.out.println(file);File file1=new File("E:"+File.separator+"4_4"+File.separator+"test.txt");System.out.println(file1);File file2=new File("E:\\4_4\\test.txt");System.out.println(file2);

3. 静态成员变量

4. 常用构造器

一个File对象相当于硬盘上的文件。

在构建对象的时候,就需要把这个文件的路径给指定进来 (使用绝对/相对路径来表示)。


5. 常用方法

5.1 获取功能
5.1.1 getParent()


 5.1.2 getName()

这里的文件名 是 前缀+扩展  test.txt


5.1.3 getPath()
返回 File 对象的文件路径。
  • 这个方法返回的是构造文件对象时使用的路径字符串。
  • 如果文件对象是通过相对路径创建的,则返回的是相对路径字符串。
  • 如果文件对象是通过绝对路径创建的,则返回的是绝对路径字符串。
需要注意的是, getPath()方法不会检查文件是否存在,它只是返回文件对象的路径字符串。
File file1=new File("E:/4_4/test.txt");
System.out.println(file1.getPath());//绝对路径File file2=new File("test.txt");System.out.println(file2.getPath());//路径字符串File file3=new File("4_4/test.txt");System.out.println(file3.getPath());//相对路径


5.1.4 getAbsolutePath()和getCanonicalPath()

    public static void main(String[] args) throws IOException {File file=new File("e:/test.txt");System.out.println(file.getAbsoluteFile());System.out.println(file.getCanonicalFile());}

windowns上的盘符,是不区分大小写的。

上面的不是很能区别,我们用这种 ./格式

  public static void main(String[] args) throws IOException {File file=new File("./test.txt");System.out.println(file.getAbsoluteFile());System.out.println(file.getCanonicalFile());}

其实绝对路径就是将 相对路径 拼接到 基准目录上。对于IDEA中,基准目录,就是项目所在的目录。我创建的项目是File_test.


5.2判断功能
5.2.1 exists()

判断是否存在文件就可以使用这个方法。


5.2.2 isDirectory()和isFile()


5.2.3 canRead()和canWrite() 以及isHidden()

一般文件系统上都会对文件有权限的限制。(这个事情在Windows上不太明显)很多同学,windows系统里面的用户都是管理员,管理员的权限很大,可以无视文件本身的权限。


 5.3 创建功能

注意事项: 如果你创建文件或者文件目录没有写盘符路径,那么,默认在项目路径下。 

5.3.1  createNewFile()

如果文件存在,就打印绝对路径,如果不存在,那么就打印不存在

   public static void main(String[] args) throws IOException {File file=new File("e:/test.txt");if(file.exists()){//如果文件存在,就打印文件不存在System.out.println("文件已经存在");}else {//如果文件不存在,就创建文件  并且打印绝对路径file.createNewFile();System.out.println(file.getAbsoluteFile());//如果不存在就打印绝对路径}}

此时e盘就出现了test.txt文件了。


5.3.2  mkdir()和mkdirs()

创建目录mkdir()

   public static void main(String[] args) {File file=new File("e:/4_4");boolean mkdir=file.mkdir();//如果目录存在就返回true 不存在就返回falseif(mkdir){//如果目录存在 就打印创建成功System.out.println("创建成功");}}


创建多个目录,就需要mkdirs()

  public static void main(String[] args) {File file=new File("e:/4_3/111/222");boolean mkdirs=file.mkdirs();if(mkdirs){//如果目录存在,就打印创建成功System.out.println("创建成功");}}

一般都是用mkdirs更好。 


5.4 删除功能
5.4.1 delete()

注意事项: Java中的删除不走回收站。 要删除一个文件目录,请注意该文件目录内不能包含文件或者文件目录。

  public static void main(String[] args) {File file=new File("e:/test.txt");boolean delete=file.delete();if(delete){//如果删除成功System.out.println("删除成功");}else {System.out.println("删除失败");}}


但是如果删除一个目录,如果里面没有目录和文件的话,那么就删除成功,如果里面有目录和文件的话,那么就删除失败。

我们从上面可以知道,4_3里面有一系列的目录,所以删除失败。而4_4目录中没有目录和文件,所以删除成功


5.4.2 deleteOnExit() 
根据 File 对象,标注文件将被删除,删除动作会到 JVM 运行结束时才会进行

    public static void main(String[] args) throws IOException, InterruptedException {File file=new File("e:/test.txt");file.deleteOnExit();Thread.sleep(5000);System.out.println("程序结束");}

我们创建一个文件,然后我们调用deleteOnExit()方法之后,休眠5s之后,等程序结束后,就删除文件了。


在office或者wps软件中,在编辑一个文件的时候,就会自动产生一个隐藏的文件,会在你关闭文件的时候自动删除掉。

关闭文件后就自动删除了。

因为当word文件修改并且保存后关闭了,说明线程结束了,此时就自动删除临时文件。所以在deleteOnExit()方法的时候,调用之后等待线程结束才结束,这样就防止数据丢失。为了解决你的电脑突然断电,数据来不及保存的问题,这种机制就可以避免这种情况。


5.5 查看功能
String[]
list()返回 File 对象代表的目录下的所有文件名 (文件名)
File[]listFiles()
返回 File 对象代表的目录下的 所有文件 ,以 File 对象
表示 (路径)
5.5.1 list() 

我们在E:\4_4\5_5目录下创建几个文件,我们调用该方法接收。

  public static void main(String[] args) {File file=new File("e:/4_4/5_5");String[] strings=file.list();System.out.println(Arrays.toString(strings));}

返回的是文件名。 


5.5.2 listFiles() 
 public static void main(String[] args) {File file=new File("e:/4_4/5_5");File[] strings=file.listFiles();System.out.println(Arrays.toString(strings));}

 返回的是路径下的文件。


5.6 更改功能 
5.6.1 renameTo()

如果不存在该文件就返回false。如果存在该文件就返回true。

boolean
renameTo(File
dest)
进行文件改名,也可以视为我们平时的剪切、粘贴操作

e盘下有个test.txt文件。

  public static void main(String[] args) {File srcFile=new File("e:/test.txt");//源File destFile=new File("e:/test2.txt");//目标boolean ret=srcFile.renameTo(destFile);System.out.println(ret);}

此时的文件名称重命名成test2.txt。


📝强化练习

🎈 显示文件及文件夹内容

 首先我们输入文件夹路径,首先我们先打印名称,然后继续往后遍历,列出当前目录下的文件或者目录,然后就进入下一个路径了,所以此时我们要用一个count来用于美观的打印出文件的路径,否则都打印成一列看不出来路径的关系,然后我们就依次遍历该路径下的文件或者目录,先\t,然后哦判断是否是文件,如果是文件那么就打印名字,如果不是文件,那么就是文件夹,文件夹就进行递归,按照这样的思路打印即可。

    public static void main(String[] args) {System.out.println("请输入一个文件夹路径:");Scanner scanner=new Scanner(System.in);String s=scanner.next();File file=new File(s);int count=0;showDir(file,count);}public static  void showDir(File file,int count){System.out.println("|-"+file.getName());//得到当前的纯文件名称File[] files=file.listFiles();//列出目录下所有的文件count++;//每次列出当前目录下的文件都count++for (File file1:files) {printTab(count);//先tab再打印if(file1.isFile()){System.out.println("|-"+file1.getName());//如果是文件那么就打印}else{//如果不是文件,那么就是目录,那么就继续遍历showDir(file1,count);}}}public  static void printTab(int count){for (int i = 0; i <count ; i++) {System.out.print("\t");//美观要求 }}

🎈统计文件夹大小


file.length() 方法用于获取文件的大小,返回的是以字节为单位的文件大小。在Java中,File类的length()方法返回一个long类型的值,表示文件的大小。这个方法可以用于检查文件的大小,以便进行各种操作,比如文件传输、文件拷贝等。

还是以这个目录为例,计算文件夹大小,我们输入文件夹路径,然后传入当参数,文件夹的大小返回值是long类型,然后我们列出当前文件列表,如果是文件夹,那么就继续递归操作,如果不是文件夹,那么就就更新文件夹大小,直到递归完成。

    public static void main(String[] args) {System.out.println("请输入文件夹路径");Scanner scanner=new Scanner(System.in);String s=scanner.next();File file=new File(s);long size=calculateDirSize(file);//文件夹大小返回值是longSystem.out.println(size);}public static long calculateDirSize(File file){int size=0;File[] files=file.listFiles();for (File file1:files) {if(file1.isDirectory()){//如果是文件夹 那么就继续递归操作size+=calculateDirSize(file1);}else {//如果不是文件夹了,那么就加上当前的文件夹的大小即可size+=file1.length();}}return size;}

和上述的文件大小一模一样。


java.io包中File类里面有很多的方法,底层实现。文件系统操作涉及到的和windows下的删除创建复制剪切等操作都是在java代码中File类中都得以实现。


多敲代码,多思考。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VSCode SSH 连接 Could not establish connection to “XXX“: spawn UNKNOWN.

1. 确认问题&#xff1a; 拉取vscode终端&#xff1a;快捷键 ctrl(数字1旁边那个) 输入&#xff1a;ssh -V 2. 解决方法 2.1 找到本地SSH 位置 默认本地路径&#xff1a; C:\Windows\System32\OpenSSH 2.2 找到要修改的位置 进入 ssh 插件的设置&#xff08;可以通过在插…

Jenkins首次安装选择推荐插件时出现”No such plugin cloudbees-folder”解决方案

安装Jenkins成功之后&#xff0c;首次启动Jenkins后台管理&#xff0c;进入到安装插件的步骤&#xff0c;选择"推荐安装"&#xff0c;继续下一步的时候出现错误提示&#xff1a; 出现一个错误 安装过程中出现一个错误&#xff1a;No such plugin&#xff1a;cloudb…

基于SSM的药店药品商城管理系统

介绍 本项目分为前后台&#xff0c;分为管理员与普通用户两种角色&#xff0c;管理员登录后台&#xff0c;普通用户登录前台&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录,订单管理,客户管理,药品管理,类目管理等功能。用户角色包含以下功能&#xff1a; 用户首…

基于51单片机智能加湿器控制系统

基于51单片机智能加湿器控制系统 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff09; 功能介绍 具体功能&#xff1a; 1.LCD1602实时显示湿度值&#xff08;湿度范围10%-95%&#xff09;和湿度阈值&#xff1b; 2.可以通过按键设置湿度阈值范围&#xff1b; 3…

JAVAEE——文件IO

文章目录 文件的概念什么是文件&#xff1f;树型结构组织 和 目录文件路径相对路径绝对路径 文件的分类文件的权限 文件读写IO API字符流操作API 警告字节流操作APIInputStreamOutputStream 文件的概念 什么是文件&#xff1f; 我们先来理解一下什么是文件&#xff0c;那么想…

【Leetcode】top 100 图论

基础知识补充 1.图分为有向图和无向图&#xff0c;有权图和无权图&#xff1b; 2.图的表示方法&#xff1a;邻接矩阵适合表示稠密图&#xff0c;邻接表适合表示稀疏图&#xff1b; 邻接矩阵&#xff1a; 邻接表&#xff1a; 基础操作补充 1.邻接矩阵&#xff1a; class GraphAd…

2024.04.04 健身打卡第 45 天

别让别人告诉你&#xff0c;你成不了才&#xff0c;如果你有梦想的话就要去捍卫它&#xff0c;那些一事无成的人&#xff0c;想告诉你你也成不了大器&#xff0c;如果你有理想的话&#xff0c;就要去努力实现。 2024.04.04 健身打卡第 45 天

中间件复习之-RPC框架

什么是RPC框架&#xff1f; RPC(Remote Procedure Call):远程过程调用。当多个应用部署在多个服务器上时&#xff0c;由于他们不在一个内存空间上&#xff0c;因此需要网络来进行通信&#xff0c;而RPC允许它像调用本地方法一样调用远程服务。 RPC原理 服务消费方通过RPC客户…

【卷积神经网络进展】

打基础日常记录 CNN基础知识1. 感知机2. DNN 深度神经网络&#xff08;全连接神经网络&#xff09;DNN 与感知机的区别DNN特点&#xff0c;全连接神经网络DNN前向传播和反向传播 3. CNN结构【提取特征分类】4. CNN应用于文本 CNN基础知识 1. 感知机 单层感知机就是一个二分类…

实战篇01:开发环境搭建

实战篇01-开发环境搭建 一、准备数据库 执行资料中的big_event.sql脚本&#xff0c;准备数据库表&#xff0c;命令&#xff1a;source /root/Desktop/bigEvent/big_event.sql连接数据库&#xff0c;验证执行 二、创建spring boot工程 创建spring boot工程&#xff0c;勾选we…

【蓝桥杯】GCD与LCM

一.概述 最大公约数&#xff08;GCD&#xff09;和最小公倍数&#xff08;Least Common Multiple&#xff0c;LCM&#xff09; 在C中&#xff0c;可以使用 std::__gcd(a, b)来计算最大公约数 1.欧几里德算法/辗转相除法 int gcd(int a,int b){return b?gcd(b, a%b):a; } 2…

力扣刷题 二叉树的迭代遍历

题干 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&#xff1a;root [1] 输…