认识文件
什么是文件呢?
我们先来认识狭义上的文件(file)。针对硬盘这种持久化存储的I/O设备,当我们想要进行数据保存时,往往不是保存成一个整体,而是独立成一个个的单位进行保存,这个独立的单位就被抽象成文件的概念,就类似办公桌上的一份份真实的文件一般.
计算机中的文件就和我们现实中的文件相似!
我们一般通过硬盘存储文件!
所以我们硬盘下存储了好多文件
例如:
.java文件(我们编写的java代码) .jpg文件(图片也是文件),.txt文件(文本文件)…我们硬盘下的文件还有很多…
我们这里就不一一举例了!
不同的后缀名,为不同类型的文件!
所以我们需要打开查看后缀名(默认是查看不了后缀名的),便于我们知道文件的类型!
我们知道存储在硬盘上的就是文件,除了上面这些可以打开的文件,还有目录文件!目录(我们所说的文件夹)也是文件的一种!
像这些文件夹都是文件的一种!
在操作系统中,网卡也是一种文件,还有很多硬件设备都看作是文件!
键盘,鼠标,打印机等等都看做是文件,还有些软件也被当做是文件!
这样便于管理,操作同样的文件管理的代码可以操作所有的文件
文件分类
我们这里的分类站在程序员的角度!
我们将文件分为两类:
文本文件
文本文件存储的是字符,我们知道一个字符,可能占多个字节单位!
二进制文件
二进制文件储存的是二进制数(0/1),二进制文件中的字节是分开的!
我们刚刚还说文件有很多类…为啥现在就2类了,如何区分他们呢?
如果用记事本打开不乱码就是文本文件,打开乱码就是二进制文件!
可以看到jpg是二进制文件,很多文件都是二进制文件!
像word那些也是二进制文件,因为他们有一些格式,属于富文本,也就是二进制! 只有像那些txt文件才是文本文件!
目录结构
我们硬盘下的文件都是由文件系统管理,就是我们电脑中的文件
我们的文件由文件系统管理,就是我们此电脑下的硬盘!
文件是由树形结构管理!采用多叉树的形式进行管理!
所以通过多叉树的结构管理文件系统!
我们的叶子节点就是一个文件!而非叶子节点就是目录文件!
路径
如果我们要描述一个文件所在的位置,我们可以采用两种描述方式!
这两种描述方式是操作系统给我们提供的路径的方式,定位一个文件的位置!
绝对路径
绝对路径就是电脑我们打开一个文件目录,上方所看到的路径地址!
D:\java\2022_1_13\src
这里的test.java就是在这个路径里面!
简单说就是如果这个路径第一个是盘符(C/D盘等),那么这个路径就是绝对路径,我们在电脑中任意位置都可以精准的找到这个文件!
就相当于你身份证上的地址!超详细!
相对路径
相对路径,我们学过物理都知道,相对就是相对某个参考系而言,地址所在的位置!
如果我们已经知道了,你的具体某个现地址,所以只要知道你的乡,村就可以找到你的家庭地址了!
也就是我们需要有参考位置!
参考这个目录文件,你所在的路径,就是相对路径!
假如我们以D:\java\2022_1_13为参考地址也就是基准目录!
那么out文件如何表示呢!
./out这就表示了基准下的out相对路径了!
如果我们要找基准的父文件目录中的文件呢?
我们通过../的方式找到基准路径的父目录!
../2022_1_12以D:\java\2022_1_13为基准路径表示2022_1_8文件位置!
./ 表示当前目录!
../表示上一级目录!
还有你发现一个小细节没有!
为啥路径可以用/也可以用\呢?
一般情况下用/反斜杠表示路径!
而windows支持用\表示路径!但是也支持/
可以看到windows下输出的路径都是\!!!
/便于我们编程使用,如果我们用/编译器就以为我们使用了转义字符,就比较繁琐!
如果要使用\我们要对\转义操作!
java文件操作
我们java提供了一个File类,在java.io包下,我们通过这个类就可以完成对文件的操作,首先这个文件对象就描述了一个文件/目录,就可以实现很多功能!
File文件和目录路径名的抽象表示。
文件系统相关的操作
文件系统相关的操作也就是我们看到的文件系统所具有的操作文件的功能,我们通过java代码也能实现!
这里可执行的功能,我们通过java代码也都可以实现!
例如:打开文件,删除文件,查看文件大小,日期…一系列关于文件的操作我们都可以进行!
我们java有一组文件操作的API
通过上述的方法就可以对文件进行管理!
我们来演示几个常用的方法:
package file; import java.io.File; import java.io.IOException; public class File1 { public static void main1(String[] args) { //我们创建一个File对象,传入路径 File file1 = new File("D:/1.txt"); File file2 = new File("D:/test.txt"); //判断该文件是否存在! System.out.println(file1.getName()+"是否存在:"+file1.exists()); System.out.println(file2.getName()+"是否存在:"+file2.exists()); } public static void main(String[] args) { File file = new File("D:/test.txt"); System.out.println("是否可读:"+file.canRead()); System.out.println("是否可写"+file.canWrite()); System.out.println(file.isDirectory()); System.out.println("路径:"+file.getAbsolutePath()); System.out.println("路径:"+file.getPath()); System.out.println("是否为目录文件:"+file.isDirectory()); System.out.println("父目录路径:"+file.getParent()); System.out.println("父目录文件:"+file.getParentFile()); //在D盘下创建 4_22.txt文件! //只是创建了一个文件对象!在硬盘中并没有文件! File newFile = new File("D:/4_22.txt"); try { //在硬盘中创建该文件! newFile.createNewFile(); } catch (IOException e) { e.printStackTrace(); } System.out.println("文件:"+newFile.getName()); System.out.println("文件大小:"+newFile.length()); System.out.println("删除文件:"+newFile.delete()); System.out.println("文件是否存在:"+newFile.exists()); } }
我们D盘下并没有1.txt文件,所以文件不存在!
我们通过文件对象File调用createNewFile()方法,就可以真正的在我们的计算机中创建该文件!
//创建目录文件! public static void main(String[] args) { //创建目录! File file = new File("./aaa"); // 创建一级目录 mkdir 方法! file.mkdir(); System.out.println(file.isDirectory()); // 创建多级目录 mkdirs 方法! File file1 = new File("../aaa/bbb/ccc"); file1.mkdirs(); System.out.println(file1.isDirectory()); }