1.数据都是以字节的形式存在的,不管什么类型的文件(图片,视频,音频,文本等)最终都是字节数据。
java.io.File 类是文件和目录路径表示
2.File 类的构造方法
public File(String pathname) :通过路径创建File对象
public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。
public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。
public class Demo01 {
public static void main(String[] args) {
// File类的构造方法
//路径分隔符:
//windows : \反斜杠也是java中转义字符,所以使用时要进行转义, \\
//Linux,Unix,Mac : /
// public File(String pathname) :通过路径创建File对象
File f1 = new File("F:\\study\\1.txt");
File f2 = new File("F:/study/1.txt");
System.out.println("f1 = " + f1);
System.out.println("f2 = " + f2);
// public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的
String parent="F:/study/1.txt";
String child="1.txt";
File f3 = new File(parent,child);
System.out.println("f3 = " + f3);
// public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的
File f4 = new File(new File(parent), child);
System.out.println("f4 = " + f4);
}
}
运行结果:
注:路径分隔符:windows: \反斜杠也是java中转义字符,所以使用时要进行转义:\\
Linux,Unix,Mac: /
3.获取功能方法
public String getAbsolutePath() :返回此File的绝对路径名字符串。
public String getPath() :将此File转换为路径名字符串。 【获取构造路径】
public String getName() :返回由此File表示的文件或目录的名称。 如果有后缀一并获取
public long length() :返回由此File表示的文件的长度【单位是字节】。
相对路径和绝对路径的概念:
绝对路径:从盘符开始的路径,这是一个完整的路径,如:F:/study/狗子日记.txt
相对路径:在访问本项目文件时,可以使用相对路径,如:dir/狗子日记.txt
public class Demo02 {
public static void main(String[] args) {
//绝对路径
File f1 = new File("F:/study/狗子日记.txt");
//相对路径(当前项目可以使用相对路径)
File f2 = new File("dir/狗子日记.txt");
// public String getAbsolutePath() :返回此File的绝对路径名字符串。
System.out.println("绝对路径:"+f1.getAbsoluteFile());
System.out.println("绝对路径:"+f2.getAbsoluteFile());
// public String getPath() :获取构造路径,创建File类用的啥路径获取的就是啥路径
System.out.println("构造路径:"+f1.getPath());
System.out.println("构造路径:"+f2.getPath());
// public String getName() :返回由此File表示的文件或目录的名称。 如果有后缀一并获取
String name = f2.getName();
System.out.println("name = " + name);
// public long length() :返回由此File表示的文件的长度【单位是字节】。
long length = f2.length();
System.out.println("length = " + length);
}
}
4.判断功能的方法
public boolean exists() :此File表示的文件或目录是否实际存在。
public boolean isDirectory() :此File表示的是否为目录。
public boolean isFile() :此File表示的是否为文件。
public class Demo03 {
public static void main(String[] args) {
File f = new File("F:/study/1.java");
// - public boolean exists() :此File表示的文件或目录是否实际存在。
boolean flag1 = f.exists();
System.out.println("flag = " + flag1);
// - public boolean isDirectory() :此File表示的是否为目录。
boolean flag2 = f.isDirectory();
System.out.println("flag2 = " + flag2);
// - public boolean isFile() :此File表示的是否为文件。
boolean flag3 = f.isFile();
System.out.println("flag3 = " + flag3);
}
}
5.创建删除功能方法
public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
public boolean mkdir() :创建由此File表示的目录。
public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。
public boolean delete() :删除由此File表示的文件或目录。
public class Demo04 {
public static void main(String[] args) throws IOException {
// public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
File f1 = new File("dir/file.txt");
boolean newFile = f1.createNewFile();
System.out.println("newFile = " + newFile);
// public boolean mkdir() :创建由此File表示的目录。
File f2 = new File("dir01");
boolean flag = f2.mkdir();
System.out.println("flag = " + flag);
// public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。
File f3 = new File("dir02/dnf/abc");
boolean flags = f3.mkdirs();
System.out.println("flags = " + flags);
File f4 = new File("dir02");
System.out.println("文件下不是空" + f4.delete());//false
System.out.println("文件下是空" + f2.delete());//true
}
}
执行后的结果:
注:
1)delete方法,如果此File表示目录,则目录必须为空才能删除。
2)函数的删除不走回收站。谨慎使用。
6.遍历功能
public String[] list() :返回一个String数组,获取当前File目录下的所有子文件或目录。
public File[] listFiles() :返回一个File数组,获取当前File目录下的所有子文件或目录。
public File[] listFiles(FileFilter filter):按照filter的规则筛选需要的子文件
public class Demo05 {
public static void main(String[] args) {
File file = new File("F:/study");
// public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
String[] list = file.list();
for (String fileName : list) {
System.out.println("fileNP = " + fileName);
}
System.out.println("=========================");
// public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。
File[] files = file.listFiles();
for (File filePath : files) {
System.out.println("fileName = " + filePath);
}
// public File[] listFiles(FileFilter filter):按照filter的规则筛选需要的子文件
// 比如获取当前File目录下的所以txt文件
FileFilter filter=file1 ->{
String name = file1.getName();
boolean result = name.endsWith(".txt");
return result;
};
File[] fileTxt = file.listFiles(filter);
for (File f : fileTxt) {
System.out.println("f = " + f);
}
// 注意:如果File目录下没内容会返回:空的数组
File file1 = new File("dir02/dnf/abc");
System.out.println("file1 = " + file1.list().length);
// 注意:如果File路径是文件不是目录:null
File file2 = new File("dir/狗子日记.txt");
System.out.println("file2.list().length = " + file2.list());
// 注意:如果File目录不存在则返回:null
File file3 = new File("dir/txt");
System.out.println("file3.list() = " + file3.list());
}
}
运行结果:
注:
调用listFiles方法的File对象,表示的必须是实际存在的目录,否则返回null,无法进行遍历,可看上图中的最后代码。
7.习题,统计文件中java文件的数量
public class Demo06 {
public static void main(String[] args) {
//1.获取一个File类
File fileTager = new File("F:/study");
//2.获取File目录下的.java文件
FileFilter filter = file->{
String name = file.getName();
//将获取的文件名字全部小写化
String NewName = name.toLowerCase();
boolean result = NewName.endsWith(".java");
return result;
};
File[] file_java = fileTager.listFiles(filter);
System.out.println("file_java.length = " + file_java.length);
for (File file : file_java) {
System.out.println("file = " + file);
}
}
}
执行结果:
知识小插曲:
String.toLowerCase(),将字符串里的英文字母全部转化为小写
String.toUpperCase(),将字符串里的英文字母全部转化为大写
String.endsWith(".java"),判断字符串结尾是.java,如果是则返回:true
注解:@FunctionalInterface 为函数是接口,可以用Lambda表达式抒写
Lambda表达式,就是重写函数表达式。