【Java ee 初阶】文件操作和IO(上)

一、文件

文件在计算机中,是保存到"硬盘"上的。操作系统,把硬盘操作进行了抽象封装,使得编程的时候,是不会直接操作硬盘的,而是通过"文件"的概念来进行间接操作。

文件有哪些操作?------>打开文件,关闭文件,读文件,写文件......

通过前面的学习我们可以知道,cpu包括存储器、输入设备、输出设备,其中存储器包含内存和硬盘,软盘、光盘、U盘也属于存储器。

磁盘上的盘片是存储数据的介质,可以快速旋转,磁盘上还有磁头,磁头可以读取文件。

通过文件资源管理器来管理所有文件。

文件的路径

如图所示,通过类似于"树形结构"来管理所有的文件。这是一个N叉树的结构。

而我们又通过"文件路径"的概念,来描述一个文件的位置,从根节点一致到该文件,过程中遇到的每一个目录集合。

同一个机器上,文件路径得是唯一的。

例如:这个文件的路径,就是 D:\qq\MobileFile\Image

通过观察可以知道,文件路径中的每一级目录,都是用 \ 来分割的。其实 \ 这个设定,是windows独有的设定。其他的操作系统,例如Linux,MacOS,Android...都是使用 / ,windows也支持 /。

以上这种以盘符开头的路径,也被称为"绝对路径",和绝对路径并列,还有一种表示方式,"相对路径"。通常是以 . 或者 .. 开头的路径,比如 .\Image。谈到相对路径,一定要明确,相对路径的"参考系"是什么,相对那个目录(以哪个目录为起点)来进行"相对"的。

而"那个目录"也就是工作目录/基准目录。

定位到同一个文件,如果基准路径不一样,那么相对路径也是不同的。

例如

.\Image 的基准目录,也就是 D:\qq\MobileFile

D:\qq ------>.\MobileFile\Image

D:\qq\MobileFile\Image\新建文件夹 ------> ..\Image【..表示当前路径的上级目录】

D:\qq\MobileFile\Image\新建文件夹\新建文件夹 ------>..\..\Image

小结:基准路径 拼接上 相对路径 =>绝对路径

实际开发中,绝对路径和相对路径,都会经常用到(尤其是相对路径,用的更多一些)

文件的种类

所有的文件,可以分成两个大类:

(1)文本文件 文本文件 存的都是字符串,都是"合法的字符"

*什么是合法的字符?------>文件看他是哪种 编码,如果是utf8 编码的话,意味着文件中的任何一个字符都是utf8,是码表中的合法字符。

*在计算机中,一个汉字占用几个字节?------>答案是不确定。因为计算机中表示汉字都是通过编码来表示的。ascii通过数字,表示英文字母/标点符号/阿拉伯数字。而我们引用更大的码表来表示汉字。

1.gbk 2个字节表示一个汉字(windows简体中文版本,默认就是gbk ,VS的默认编码是跟随系统的)

2.utf-8 【主流】,utf8是边长编码,2-4个字节。大部分的汉字都是3个字节表示。

3.java中,一个char用到utf16,也就是2两个字节表示一个汉字。String又通常会转化成utf8的形式。(内部编码转换的过程,使用的过程中是感知不到的)

(2)二进制文件 二进制文件存什么都可以

如何简单判断一个文件是二进制文件还是文本文件?------>简单的方法判断文件时把这个文件使用notepad打开查看是否乱码。

文本文件/二进制文件,在编写代码的时候,是有差别的。

查看字符编码(UTF-8)

java进行文件操作

1.文件系统操作

包含创建文件,删除文件,移动文件,获取文件属性......

File类

|-----------------------------------|------------------------------------------------------------|
| 方法签名 | 说明 |
| File(File parent, String child) | 根据父目录(File类型) + 孩子文件路径(String类型),创建一个新的File实例 |
| File(String pathname) | 根据文件路径(String类型)创建一个新的File实例,路径可以是绝对路径或者相对路径 |
| File(String parent, String child) | 根据父目录路径(String类型) + 孩子文件路径(String类型),创建一个新的File实例,父目录用路径表示 |

构造File类对象,核心就是指定"路径",这里的路径,可以是绝对路径,也可以是相对路径。

如果是根据绝对路径进行创建:

利用相对路径来创建一个文件对象

对于Trae着一些的开发工具来说,基准路径可以在运行中看见

如果使用IDEA,也是类似,也是有"终端"的概念,也能看到基准路径是什么

方法:

|---------------|---------------------|------------------------------------------|
| 修饰符及返回值类型 | 方法签名 | 说明 |
| String | getParent() | 返回 File 对象的父目录文件路径 |
| String | getName() | 返回 File 对象的纯文件名称 |
| String | getPath() | 返回 File 对象的文件路径 |
| String | getAbsolutePath() | 返回 File 对象的绝对路径 |
| String | getCanonicalPath() | 返回 File 对象的修饰过的绝对路径 |
| boolean | exists() | 判断 File 对象描述的文件是否真实存在 |
| boolean | isDirectory() | 判断 File 对象代表的文件是否是一个目录 |
| boolean | isFile() | 判断 File 对象代表的文件是否是一个普通文件 |
| boolean | createNewFile() | 根据 File 对象,自动创建一个空文件。成功创建后返回 true |
| boolean | delete() | 根据 File 对象,删除该文件。成功删除后返回 true |
| void | deleteOnExit() | 根据 File 对象,标注文件将被删除,删除动作会到 JVM 运行结束时才会进行 |
| String[] | list() | 返回 File 对象代表的目录下的所有文件名 |
| File[] | listFiles() | 返回 File 对象代表的目录下的所有文件,以 File 对象表示 |
| boolean | mkdir() | 创建 File 对象代表的目录 |
| boolean | mkdirs() | 创建 File 对象代表的目录,如果必要,会创建中间目录 |
| boolean | renameTo(File dest) | 进行文件改名,也可以视为我们平时的剪切、粘贴操作 |
| boolean | canRead() | 判断用户是否对文件有可读权限 |
| boolean | canWrite() | 判断用户是否对文件有可写权限 |

IO异常:输入输出过程中出现异常了

PS 全程Power Shell :windows上的终端名字

java 复制代码
import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class demo {

    public static void main(String[] args) throws IOException {
        File file = new File("d:/test.txt");
        //创建一个文件
        file.createNewFile();
        System.out.println("创建文件成功");
        //删除一个文件
        //只有当进程全部结束的时候,文件才会被删除
        file.deleteOnExit();
        System.out.println("删除文件成功");

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个数字:");
        int num = scanner.nextInt();
        
    }
}

2.文件内容操作

包含 读文件,写文件...

------TBC------

相关推荐
少了一只鹅12 分钟前
深入理解指针(5)
java·c语言·数据结构·算法
好吃的肘子39 分钟前
ElasticSearch入门详解
java·大数据·elasticsearch·搜索引擎·云原生
工业互联网专业1 小时前
基于springboot+vue的房屋租赁管理系统
java·vue.js·spring boot·毕业设计·源码·课程设计·房屋租赁管理系统
阿乾之铭1 小时前
Spring Boot 中的重试机制
java·spring boot·后端
D_aniel_2 小时前
排序算法-堆排序
java·排序算法·堆排序
哞哞不熬夜2 小时前
JavaEE--文件操作和IO
java·开发语言·windows·学习·java-ee·intellij-idea·idea
LUCIAZZZ2 小时前
JVM之内存管理(二)
java·jvm·后端·spring·操作系统·springboot
向哆哆2 小时前
Hibernate 性能优化:告别慢查询,提升数据库访问性能
java·数据库·性能优化·hibernate
小雅痞2 小时前
[Java][Leetcode middle] 80. 删除有序数组中的重复项 II
java·python·leetcode
小吕学编程2 小时前
Redis从基础到高阶应用:核心命令解析与延迟队列、事务消息实战设计
java·数据结构·redis