[Java Web] 文件操作——IO

1.什么是 I/O?

I/O计算机硬件视角下,非内存数据的读写动作。

这里主要介绍 文件(硬盘)I/O

System.in、System.out、System.err 都是我们接触到的I/O

2.文件概念

狭义上的文件(File):一种抽象的概念,表示硬盘中的数据块

变量、对象是对内存中数据的抽象。 文件是对硬盘中数据的抽象

文件系统(FileSystem):对硬盘上的数据——文件进行直接组织和管理的一个模块

3.硬盘存储 VS 内存存储

(1)硬盘存储

特点:非易失性存储:可以在断电的情况进行数据的保存

低速存储:读写速度远低于内存(弥合速度差,所以针对硬盘数据的读写提出了各种各样的数据结构、算法来解决——尽可能的减少读写频次)

硬盘中的数据更适合:

1.块状读取(block) VS 字节读取(char)

一次性读写很多的数据 和 频繁地进行读写

单纯从 IO 来讲:块状设备 VS 字符设备

2.连续地读写 VS 随机的读写

 由于其低速性——缓冲区(buffer)技术

以OS 为代表:会在内存中开辟一段空间——缓冲区,每次写入的东西,等多次写完之后,统一写回硬盘中,而不是写一次就往硬盘写一次,这样就可以减少硬盘地读写频次。

但同时也需要考虑遗留在缓冲区中地数据丢失问题。

达到一定条件后统一写回硬盘地这个条件:

1.应用程序主动要求:冲刷缓冲区 flush(IO中进行 flush 是必不可少的操作,否则数据会丢失)

2.定时冲刷:每隔一定时间冲刷

3.定量冲刷:满了之后必须写到硬盘中

4.对数据的认识

我们一般都把数据抽象成数字(什么进制、什么宽度);如何解释这些数据 -> 文本、像素、波...

文本数据:可以按照一定的字符集编码解释成文本的数据

二进制数据:不可以直接解释成文本

5.文件

(1)逻辑上,一个文件是由两块数据组成的:①文件内容本身“你好世界”的utf-8编码的数据      

         ②该文件的元(meta)数据:管理数据。比如:文件名称叫什么,谁创建的,路径在哪,权限是什么

(2)文件系统按照树形结构,进行文件的组织

(3)目录/文件夹 也是一类文件,只是一种特殊的文件

 这些都是管理数据

文件 = 文本文件 or 二进制文件

文件= 普通文件(文件) or 文件夹文件

6.文件的位置/路径

用于定位到是哪个文件的(用树的角度看,就是树上的一个结点)

绝对路径:从一棵树的根结点出发,到达对应结点的完整路径(一定是从根开始)

C: -> Program File   ->  Java    ->   a.txt

根         第二层结点     第三层结点   第四层结点

 一个唯一的路径一定可以描述一个唯一的结点

Windows 上使用反斜杠\ 作为分隔符

路径存在,并不代表文件一定存在(路径是描述树中一个可能的位置,但并不代表这个位置一定有结点

相对路径:相对 ... 而言的路径。我们当前所在位置/当前工作目录

我们现在在 C:\Windows\目录下,要去找到,那么我们就  回到上一层 -> Program File -> Java -> a.txt         ..\Program File\Java\a.txt 

我们现在在 C:\Program File\MySQL\目录下,那么我们就   回到上一层 -> Java -> a.txt   ..\Java\a.txt

使用 .. 代表回到上一层。

使用 . 就在当前路径下。 

使用 ../.. 代表上一层的上一层,也就是父亲的父亲。

7.代码中体现文件

java 提供了 java.io.File 类

File 对象就是对 文件管理数据的抽象。

File()   通过一个路径来创建 File 对象。绝对路径 或者 相对路径。

File对象被创建,并不代表文件一定存在

签名说明
File(File parent, String child)
根据父目录 + 孩子文件路径,创建一个新的 File 实例
File(String pathname)
根据文件路径创建一个新的 File 实例,路径可以是绝对路径或者
相对路径
File(String parent, String child)
根据父目录 + 孩子文件路径,创建一个新的 File 实例,父目录用
路径表示
import java.io.File;

public class Main {
    public static void main(String[] args) {
        // 方法1
        {
            File file = new File("E:\\learning document\\a.txt");
            System.out.println(file);
            // 对象存在,文件并不存在
        }
        // 方法2
        {
            File parent = new File("E:\\learning document");
            File file = new File(parent,"a.txt");
            System.out.println(file);
        }
        // 方法3
        {
            File file = new File("E:\\learning document","a.txt");
            System.out.println(file);
        }
    }
}

 java 程序运行时的我们身处何处?

public class Main2 {
    public static void main(String[] args) {
        File file = new File("word.txt");
        System.out.println(file.getAbsolutePath());
    }
}

 打印出来的路径就代表我们这个java 程序运行时身处的地方,这个位置是配置出来的

我们身处何处:是一个运行期间的概念,和代码编写的时候是没有关系的。每次运行都有自己的身在何处。也就是说,我写的代码,给 A 用户去用,A 用户在哪个目录下启动,完全由 A 决定。

8.File 类的常见方法

方法
说明
boolean canExcute()判断用户是否对文件有可执行权限
boolean canRead()
判断用户是否对文件有 可读 权限
boolean canWrite()
判断用户是否对文件有 可写 权限

文件中是被OS 进行了权限管理的,以用户单位进行管理。普通用户 和 管理用户

方法说明
boolean isAsolute()是否使用绝对路径描述
boolean isDirectory()存在 && 是目录
boolean isFile()存在 && 是文件
boolean isHidden()存在 && 是隐藏文件
boolean exists()判断文件是否存在
方法
File getAbsoluteFile()
String  getAbsoluteFile()
File getCanonicalFile()
String getCanonicalFile()

方法说明
String getName()获取文件名
String getParent()获取父路径
long length()文件大小
方法说明
boolean creatNweFile()
根据 File 对象,自动创建一个空文件。成功创建后返回 true
boolean mkdir()
创建 File 对象代表的目录
boolean mkdirs()
创建 File 对象代表的目录,如果必要,会创建中间目录
boolean delete
根据 File 对象,删除该文件。成功删除后返回 true
void deleteOnExit()
根据 File 对象,标注文件将被删除,删除动作会到JVM 运行结束时才会进行
是彻底删除而不是放入回收站

文件的创建:正确的前提:文件的父目录存在 && 文件不存在 crearNewFile()

目录的创建:正确的前提:文件的父目录存在 && 文件不存在  mkdir()

                                            想连同不存在的父目录一起创建    mkdirs()

删除:普通文件可以正常删除,目录删除要求必须是空目录

方法说明
boolean renameTo(File dest)通过重命名的形式把文件移动成另一个结点   hello\a.txt  -> world\a.txt
方法说明
File[ ] listFiles()给定起始目录,列出这个目录下的所有文件

本质上,就是进行一棵的遍历,对所有结点做条件判断,深度优先的方式进行遍历(递归)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值