文件是由OS和文件系统统一管理的
1、文件被以树形结构(类似于二叉树,但不是二叉树)进行管理,文件都是树上的结点(node)
2、文件可以分为两类:
1)、存储数据的文件——普通文件(俗称文件)
2)、管理树形结构组织的文件——目录/文件夹
3、这棵树只是逻辑结构,并不是硬盘上的物理结构(一个文件可能是磁盘上的多个部分共同组合起来的)
什么的是文件路径:文件的路径是指,根据一个规则,从文件树上唯一确定一个位置,这个位置一定对应到某个节点,这个结点是可以不存在的。
从一棵树的根节点出发描述的路径
例如我们用绝对路径表示hello.jpg文件
C:/Windows/Users/hello.jgp
从当前位置出发,描述目标文件的位置
例如在hello.jpg位置描述a.txt的位置
hello.jpg的父节点Users的父节点Windows的父节点C:目录下的a.txt;
“.”:表示在当前位置
“…”:表示回到当前位置的父节点(目录)上
在文件系统中,以结点为单位进行操作(代码层面)
例如:
文件的移动操作(文件重命名,文件剪切+粘贴): 结点的移动(重命名or 移动到其他结点下)
文件复制操作:新建结点+内容的复制
目录移动操作(目录的重命名、目录剪切+粘贴):以该节点位根的一棵子树的移动
目录复制操作:以该节点位根的一棵子树的复制
删除:默认情况下只能删除普通文件或者非空目录。只能删除结点,不能删除子树
删除非空目录:对整棵树的删除(应该先遍历删除叶子结点,而后删除整棵树);
创建一个File对象,对这个File对象进行新建,修改,删除等操作
//1.绝对路径的方式创建
File file1 = new File("D:/IO/hello.txt");
//2.传入父目录+子路径
File file2 = new File("D:/IO", "hello.txt");
//3.以File传入parent
File parent = new File("D:/IO");
File file3 = new File(parent, "hello.txt");
测试文件权限
创建新的文件
例如
File file=new File("D:/IO/test.txt");
file.createNewFile();//此时会在D:/IO 目录下创建一个名为test的txt文件(注意,如果目录下已经有这个文件了就会创建失败)
删除文件
根据上个示例,我们创建了一个test.txt文件
我们就可以调用delete()方法将他删除
file.delete();//只能对叶子节点操作
//注意:文件正在被别的线程使用时,删除会失败。同时当前目录下不存在这个文件时也会删除失败
//删除非空目录也会失败
删除非空目录时,我们需要类比二叉树,需要先将他的所有叶子节点删除才能将整棵树删除,下面是利用深度优先遍历的方法删除非空目录
删除非空目录some_dir
public static void main(String[] args) throws IOException {
File file=new File("D:/IO/some_dir");
traversal(file);
}
/**
* 深度优先遍历当前文件目录的子节点(类似于二叉树的遍历)
* @param file
* @throws IOException
*/
private static void traversal(File file) throws IOException {
File[] files=file.listFiles();
for (File file1 : files) {
if (file1.isDirectory()){
System.out.println(file1.getCanonicalPath()+"\\");
traversal(file1);
//添加删除操作
file1.delete();
}else {
System.out.println(file1.getCanonicalPath());
//添加删除操作
file1.delete();
}
}
}