1.理解文件
- 文件是相关记录或者放在一起的数据的集合
- 文件可以理解为,在外设硬盘上面保存数据的一种方式
- 文件由两部分组成:属性(文件大小,文件名,文件类型)+内容(文件里面存放的东西)
- OI:就是学对于文件属性和内容进行操作,而实际写入或者读取的过程我们称之为IO
2.File文件操作类
- File:文件类
- Files:文件操作的工具类
2.1绝对路径和相对路径
- 绝对路径:指目录下的绝对位置,直接到达目标的位置,通常是从盘符开始的路径。完整的描述文件位置的路径就是绝对路径。
- 相对路径:相对于某个基准目录的路径。使用相对路径可以为我们带来便利。
我们可以使用相对路径来创建文件;
Feile file = new File("a.txt");//相对路径
File.createNewFile();
2.2 Feil类常用方法——基本文件操作
练习:
public void t1() {
//文件相对路径和绝对路径?
//绝对路径:全路径
//相对路径:./(是当前目录),../(是上一级目录)
//和绝对路径相比较,项目中尽量写相对路径,但最好是ClassLoader
//java项目在IDEA中的编译路径?
File file = new File("E:\\workspcae\\javaweb\\IO-study\\data\\测试名字");//全路径
System.out.println(file.exists());//判断文件是否存在
File file2 = new File("../data/测试名字");//相对路径
System.out.println(file2.exists());//根据上一级目录找不到
//怎么查看当前Java代码的路径,查找相对路径较好的方式
//file类写相对路径不建议在真是的项目中使用,最好是ClassLoader
File file3 = new File("data/测试名字");
System.out.println(file3.getAbsolutePath());//得到绝对路径
System.out.println(file3.exists());//判断文件是否存在
System.out.println(file3.getPath());//得到路径
System.out.println(file3.lastModified());//上次修改时间
System.out.println(file3.list());//打印当前路径的
System.out.println(file3.isDirectory());//判断是否是目录
System.out.println(file3.isFile());//判断是否是文件
}
2.3 目录操作和文件属性操作
2.4File类的其他操作
listFiles():返回目录下一级的子文件/子文件数组。
public void t2() {
File file5 = new File("E:\\workspcae\\javaweb");
File[] childen = file5.listFiles();//返回目录下一级的子文件/子文件数组,String类型
for (File child : childen) {
System.out.println(child.getName());//文件夹名
}
}
2.5综合案例——递归打印文件目录列表
虽然File提供有listFile方法,但是这个方法本身只能够列出本目录中的第一级信息。如果要求列出本目录中所有级的信息。就必须自己处理,通过递归的模式来完成。
//递归方法获取目录下所有子文件和子文件夹
public static List<File> list(File f) {
List<File> files = new ArrayList<>();
if (f.isFile()) {//如果当前f对象是一个文件,那么就加到列表中去
files.add(f);
} else {
//如果不是文件,那么找下一级子文件或者子文件夹
File[] childer = f.listFiles();
for (File child :childer) {
//如果child还有下一级文件,那么就递归调用此list方法
List<File> subs = list(child);//sub相当于一层的文件数
files.addAll(subs);//再将sub全部加入到整个的list中去
}
}
return files;
}
@Test
public void t3() {
File file5 = new File("E:\\workspcae\\javaweb");
List<File> childen = list(file5);//返回目录下一级的子文件/子文件数组,String类型
for (File child : childen) {
System.out.println(child.getName());//文件夹名
}
}
结果: