【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上的终端名字
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——