文件系统和IO流

简介: 文件系统和IO流

一:文件的认知

认识文件

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

据而存在,我们把这部分信息可以视为文件的元信息.

树型结构组织和⽬录:

同时,随着文件越来越多,对文件的系统管理也被提上了日程,如何进行文件的组织呢,⼀种合乎自然的想法出现了,就是按照层级结构进行组织也就是我们数据结构中学习过的树形结构。这样,

⼀种专门用来存放管理信息的特殊文件诞生了,也就是我们平时所谓文件夹(folder)或者目录

(directory)的概念。

 

文件路径(Path):

如何在⽂件系统中如何定位我们的⼀个唯⼀的文件就成为当前要解决的问题,但这难不倒计算机科学家

  • 绝对路径(absolute   path):从树型结构的⻆度来看,树中的每个结点都可以被⼀条从根开始,⼀直到达的结点的路径所描述

  • 相对路径(relative path):从任意结点出发,进行路径的描述

文件形式:

  • 二进制文件:按照标准格式保存的非被字符集编码过的文件,也就是通过记事本打开,里面存储的都是看不懂的乱码.
  • 文本文件:保存被字符集编码的文本,打开就是文件的内容.


二:File的方法

File的概述:

主要涉及文件的元信息、路径的操作,Java中通过 java.io.File 类来对⼀个文件(包括目录)进行抽象的描述。注意,有File对象,并不代表真实存在该文件,我们先来看看File 类中的常见属性、构造方法和方法

File的属性

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

File的构造方法

签名 说明
File(File          parent,        String        child) 根据⽗⽬录+孩⼦⽂件路径,创建⼀个新的File实例
File(String        pathname) 根据⽂件路径创建⼀个新的File实例,路径可以是绝
对路径或者相对路径
File(String        parent,        String        child) 根据⽗⽬录+孩⼦⽂件路径,创建⼀个新的File实
例,⽗⽬录⽤路径表⽰

File常用的get系列方法

修饰符及返回值类型 方法签名 说明
String getParent() 返回File对象的⽗⽬录⽂件路径
String getName() 返回FIle对象的纯文件名称
String getPath() 返回File对象的⽂件路径
String getAbsolutePath() 返回File对象的绝对路径
String getCanonicalPath() 返回File对象的修饰过的绝对路径
  • ⽰例一:观察get系列的特点和差异
import java.io.File;
import java.io.IOException;
public class Test {
    public static void main(String[] args) throws IOException {
        File file = new File("..\\hello-world.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());
    }
}

代码结果:


File常用的增,删方法

boolean exists() 判断File对象描述的⽂件是否真实存在
boolean isDirectory() 判断File对象代表的⽂件是否是⼀
个⽬录
boolean isFile() 判断File对象代表的⽂件是否是⼀
个普通⽂件
boolean createNewFile() 根据File对象,⾃动创建⼀个空⽂
件。成功创建后返回true
boolean delete() 根据File对象,删除该⽂件。成功
删除后返回true
void deleteOnExit() 根据File对象,标注⽂件将被删
除,删除动作会到JVM运⾏结束时
才会进⾏
  • 示例二:普通文件的创建、删除(代码结果已写在该代码后面)
import java.io.File;
import java.io.IOException;
public class Test {
    public static void main(String[] args) throws IOException {
        File file = new File("hello-world.txt"); // 要求该⽂件不存在,才能看
        System.out.println(file.exists());                //false
        System.out.println(file.isDirectory());           //false
        System.out.println(file.isFile());                //false
        System.out.println(file.createNewFile());         //true
        System.out.println(file.exists());                //true
        System.out.println(file.isDirectory());           //false
        System.out.println(file.isFile());                //true
        System.out.println(file.createNewFile());         //false
        System.out.println(file.delete());                //true
        System.out.println(file.exists());                 //false
    }
}

File常用的生成目录的系列方法

String[] list() 返回File对象代表的⽬录下的所有
⽂件名
File[] listFiles() 返回File对象代表的⽬录下的所有
⽂件,以File对象表⽰
boolean mkdir() 创建File对象代表的⽬录
boolean mkdirs() 创建File对象代表的⽬录,如果必
要,会创建中间⽬录
boolean renameTo(File dest) 进⾏⽂件改名,也可以视为我们平
时的剪切、粘贴操作
boolean canRead() 判断⽤⼾是否对⽂件有可读权限
boolean canWrite() 判断⽤⼾是否对⽂件有可写权限

  • 示例三:目录的创建:mkdir()的时候,如果中间目录不存在,则无法创建成功;mkdirs()可以解决这个问题(代码结果已写在该代码后面)
import java.io.File;
import java.io.IOException;
public class Test {
    public static void main(String[] args) throws IOException {
        File dir = new File("some-parent\\some-dir"); // some-parent 和 so
        System.out.println(dir.isDirectory());                  //true
        System.out.println(dir.isFile());                       //false
        System.out.println(dir.mkdirs());                       //true
        System.out.println(dir.isDirectory());                  //false
        System.out.println(dir.isFile());                       //false
    }
}

如果觉得文章不错,期待你的一键三连哦,你个鼓励是我创作的动力之源,让我们一起加油,顶峰相见!!!💓 💓 💓

相关文章
|
7月前
|
存储 Linux Shell
Linux基础IO【深入理解文件系统】
Linux基础IO【深入理解文件系统】
113 1
|
2月前
|
存储 Java API
【文件IO】文件系统操作
【文件IO】文件系统操作
52 1
|
7月前
|
存储 搜索推荐 文件存储
IO、存储、硬盘、文件系统相关常识
IO、存储、硬盘、文件系统相关常识
58 2
|
7月前
|
移动开发 前端开发 JavaScript
uniapp中IO模块(管理本地文件系统)的常用功能封装
uniapp中IO模块(管理本地文件系统)的常用功能封装
709 1
|
7月前
|
存储 固态存储 Linux
【Linux 系统】基础 IO(文件系统 & inode & 软硬链接)-- 详解
【Linux 系统】基础 IO(文件系统 & inode & 软硬链接)-- 详解
|
存储 Linux 编译器
Linux之基础IO文件系统讲解(下)
因为IO相关函数与系统调用接口对应,并且库函数封装系统调用,所以本质上,访问文件都是通过fd访问的。所以C库当中的FILE结构体内部,必定封装了fd
Linux之基础IO文件系统讲解(下)
|
存储 Linux Shell
Linux之基础IO文件系统讲解(中)
文件描述符的分配规则 看下面代码
|
存储 Unix Linux
Linux之基础IO文件系统讲解(上)
在C语言中,读文件和写文件是常见的操作,用于从磁盘读取数据到内存或将数据从内存写入磁盘文件中。这些操作需要使用标准库中的文件I/O函数。下面我将详细解释如何在C语言中进行读文件和写文件操作,并举例说明。
|
存储 安全 IDE
Linux基础IO【理解文件系统】
Linux理解文件系统,包括物理磁盘的介绍,文件系统的深入理解等相关知识,详细讲解,干货满满!
167 0
Linux基础IO【理解文件系统】
|
存储 缓存 算法
【Linux】基础IO(二)--- 理解内核级和用户级缓冲区、磁盘与ext系列文件系统、inode与软硬连接(下)
【Linux】基础IO(二)--- 理解内核级和用户级缓冲区、磁盘与ext系列文件系统、inode与软硬连接(下)
217 1