File类与IO流
IO概述
为了实现数据的持久化,需要把内存中的数据存储到内存以外的其他持久化设备(硬盘、光盘、U盘等)上。
当需要把内存中的数据存储到持久化设备上,这个行为称作输出(写)Output操作。
当把持久化设备上的数据读取到内存中的这个行为称作输入(读)Input操作。
因此我们把这种输入和输出行为称为IO操作。
想把Java程序操作完的数据保存硬盘等持久化设备上,这时需要把这些数据通过JVM,调用操作系统底层的读写技术才能把数据保存 在持久设备上,同样的如果我们要从持久设备上读取数据,也要借助操作系统底层。而Java是面向对象的语言,它把这些操作和系统底层的相关的命令已经给我们封装成相应的对象,我们需要读写操作时,找到对应的对象即可完成。
IO流
IO:I/O,Input/Output,输入/输出。
这是根据流向来进行描述的方式,究竟是输入还是输出,站在内存的角度看待问题。所有从其他设备到内存的过程,称为“输入”;所有从内存到其他设备的过程,称为“输出”。
java中操作输入输出使用的都是流对象,都是在io包中的类。
File类
在我们操作系统中,数据都保存在文件中,而文件存放相应的文件夹中。
在Java中,File类代表的是File文件和目录路径名的抽象表示形式。
- File:翻译是文件,用于表达java中的路径名。
- 路径:用于表示文件或者文件夹在当前系统中的位置
- 路径的分类:
绝对路径:没有任何的歧义,也没有任何的前提条件,Windows,从盘符开始的路径,例如"D:/a/b/c/d/a.txt"。
相对路径:相对于某个文件的路径。Java中把文件或者目录(文件夹)都封装成File对象。也就是说如果我们要去操作硬盘上的文件,或者文件夹只要找到File这个类即可。
File类的构造函数和分隔符
File类会自动甄别文件系统路径Linux/Windows;
关联了一个相对路径的文件(特殊:对于当前的IDEA/Eclipse而言 相对路径获取的文件都在项目根目录下):
File f1 = new File("haha.txt");
System.out.println(f1.exists()); //项目根目录下的haha.txt文件
File f4 = new File("C:\\Users\\HENG\\Desktop\\YD_Java\\src\\Chapter11\\haha.txt");
System.out.println(f4.exists()); //和此类同目录的haha.txt文件
关联了一个绝对路径的文件
File f2 = new File("C:\\Users\\HENG\\haha.txt");
如果此路径是Linux的文件路径 / 根目录(因为Linux/Unix/Windows/MAC这些操作系统中 路径分割符是不统一的)
File f3 = new File("/haha/xixi/lala");
File f5 = new File("C:\\Users\\HENG\\Desktop\\YD_Java\\src\\Chapter11","haha.txt");
System.out.println(f5.exists());
File parent = new File("C:\\Users\\HENG\\Desktop\\YD_Java\\src\\Chapter11");
File f6 = new File(parent,"haha.txt");
System.out.println(f6.exists());
当我们不确定程序所运行的系统环境 如果需要用到文件路径 路径分割符采用File自带的separator
String parentPath = "C:\\Users\\HENG\\Desktop\\YD_Java\\src\\Chapter11";
File f7 = new File(parentPath + File.separator + "haha.txt");
System.out.println(f7.exists());