Input — 读文件
Output — 写文件
路径
绝对路径:
1、 window — C:\xx\xx…(从盘符开始)
2、 Linux — /xx/xx (从根目录开始)
相对路径:会有一个参照对象
- 例:参考值: /Users/bonnie/Desktop
相对路径是: a.txt
a.txt的真实路径: /Users/bonnie/Desktop/a.txt
. (当前目录) - 现在的参考值
两点 (上一级目录) - 现在的参考值 往上一层
File file = new File("a.txt");
// a.txt 的路径参考值: 当前这个 module
System.out.println(file.getAbsoluteFile());
String path = DemoPath.class.
getResource("a.txt").getPath();
// a.txt 路径的参考值: 当前类的编译目录 - 就是当前这个包
// 直接理解为: a.txt 和 当前这个类 同一个包
// /Users/bonnie/IdeaWorks/corejava/out/production/API_day09/com/zzxx/a_file/a.txt
System.out.println(path);
String path = DemoPath.class.getClassLoader()
.getResource("b.txt").getPath();
// b.txt 路径的参考值: 当前这个模块编译后的根目录 classpath - 类路径
// 直接理解为: b.txt 就是在src下的
// /Users/bonnie/IdeaWorks/corejava/out/production/API_day09/b.txt
System.out.println(path);
注意:
1、类路径 classpath: 就是src编译后的目录, 也叫编译根目录
2、以上 2 和 3 代码得到的绝对路径, 都是在编译后的目录中, 和src没有直接关系
3、在开发中, 我们是先将文件放入src中的, 会自动编译到类路径中
File
(文件类, 可以表示文件或者目录)
1、构造方法
// 传入文件路径, 构造File对象
// 注意: new 出来的File对象, 只是在JVM内存中有一个对象而已
// 和本地磁盘有没有这个文件, 无关 !
File file = new File("a.txt");
System.out.println(file);
// 传入文件父路径 和 子路径, 共同构造File对象
File file = new File("b/c","d/a.txt");
System.out.println(file); // b/c/d/a.txt
2、常用API
获得文件/目录的绝对路径
File file = new File("a.txt");
// 获得file的绝对路径
String path = file.getAbsolutePath();
// /Users/bonnie/IdeaWorks/corejava/API_day09/a.txt
System.out.println(path);
判断文件/目录是否存在
File file = new File("src");
// file对应的文件或者目录存不存在
boolean exists = file.exists();
判断是否是文件/目录
File file = new File("src"); // 目录, 并且存在
File file1 = new File("c.txt"); // 不存在
File file2 = new File("a.txt"); // 文件, 并且存在
// 判断是否是目录
System.out.println("src是目录吗? " + file.isDirectory()); // true
// 判断是否是文件
System.out.println("src是文件吗? " + file.isFile()); // false
System.out.println("c是目录吗? " + file1.isDirectory()); // false
System.out.println("c是文件吗? " + file1.isFile()); // false
System.out.println("a是目录吗? " + file2.isDirectory()); // false
System.out.println("a是文件吗? " + file2.isFile()); // true
创建文件/目录
// 创建一个文件
File file = new File("a.txt");
// file.exists() 返回true, 就表示存在, 就不能创建新文件
// 如果文件不存在, 就创建这个文件
// 如果文件存在, 就不创建, 也不会报错
file.createNewFile();
File file = new File("dir");
// 创建目录
file2.mkdir();
File file = new File("test/a/b");
// 创建目录, 并且将不存在的父目录一起创建
file2.mkdirs();
获得file对象中所有的文件
// 创建一个file对象, 表示的是当前module目录
File file = new File(".");
// 列出这个目录中所有的文件和目录 File对象
File[] files = file.listFiles();
for(File f : files) {
System.out.println(f);
}
// 列出file目录下, 所有的文件和目录的名字 -- 了解
String[] ss = file.list();
for (String s : ss) {
System.out.println(s);
}
// 获得想要保留的文件/目录
File file = new File(".");
File[] files1 = file.listFiles((File f) -> {
// 只想保留 txt 文件
String name = f.getName();
return name.endsWith(".txt");
});
System.out.println(Arrays.toString(files1));
// 所有文件都保留
file.listFiles(f -> true);
删除目录
// 删除目录, 要删除目录中所有的file对象
public void deleteFile(File file) {
// 结束递归的条件: 1.file对象本身就是文件. 2.file是一个空目录
File[] files = file.listFiles();
if (files != null) {
for (File f : files) {
deleteFile(f);
}
}
file.delete();
}
@Test
public void test01() {
File file = new File("test");
deleteFile(file);
}