基本认识
File
File 是 java.io.包下的类,File 类的对象,用与代表当前操作系统的"文件"(即是文件、也是文件夹)
注意:File 类只能对文件本身进行操作,不能读写文件里面存储的数据
对文件本身进行操作:
- 获取文件信息(大小、文件名、修改时间)
- 创建文件/文件夹
- 删除文件/文件夹
- 判断文件的类型
IO 流
用于读写数据的(可以读写文件,或网络中的数据)
总结
- File:代表文件
- IO流:读写数据
File
创建 File 对象
import java.io.File;
public class Test {
public static void main(String[] args) {
// 1. 创建一个 File 对象,指代某个具体的文件
File file = new File("E:/Desktop/temp.txt");
System.out.println(file.length()); // 3
// 文件的(字节)大小
// 2. 创建一个 File 对象,指代某个文件夹
File folder = new File("E:/Desktop");
System.out.println(folder.length()); // 12288
// 文件夹的(字节)大小,不包含文件夹里面的文件大小!只是文件夹它本身的大小
// 3. File 对象可以指代一个不存在的文件路径
File file1 = new File("E:/DeskTop/a.txt");
System.out.println(file1.length()); // 0
System.out.println(file1.exists()); // false
}
}
文件操作
// 获取文件的信息
import java.io.File;
public class Test {
public static void main(String[] args) {
// 1. 创建一个 File 对象,指代某个具体的文件
File f1 = new File("E:/Desktop/temp.txt");
// 2. 判断文件是否存在
System.out.println(f1.exists());
// 3. 判断当前文件对象指代的是否是文件
System.out.println(f1.isFile());
// 4. 判断当前文件对象指代的是否是文件夹
System.out.println(f1.isDirectory());
// 5. 获取文件的名称(包含后缀名)
System.out.println(f1.getName());
// 6. 获取文件的大小,返回字节个数
System.out.println(f1.length());
// 7. 获取文件最后的修改时间(毫秒值)
System.out.println(f1.lastModified());
// 8. 获取创建文件对象时,你输入的路径
System.out.println(f1.getPath());
// 9. 获取绝对路径
System.out.println(f1.getAbsolutePath());
}
}
// 创建和删除文件
import java.io.File;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
// 1. 创建一个新文件,成功返回true
File f1 = new File("E:/Desktop/a.txt");
System.out.println(f1.createNewFile());
// 2. 创建文件夹 mkdir,注意:只能创建一级文件夹
File f2 = new File("E:/Desktop/MyDirectory");
System.out.println(f2.mkdir());
// 3. 创建文件夹 mkdirs,注意:可以创建多级文件夹
File f3 = new File("E:/Desktop/MyDirectory/aaa/bbb/ccc");
System.out.println(f3.mkdirs());
// 4. 删除文件,或者空的文件夹,注意:不能删除非空文件夹,想要删除可使用递归删除法
// 注意,delete方法删除的文件不会进入回收站!
System.out.println(f1.delete());
System.out.println(f2.delete());
}
}
// 获取某目录下的所有文件名(或文件对象)
import java.io.File;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
// 1. 获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回
File f1 = new File("E://Desktop/");
String[] names = f1.list();
for (String name : names) {
System.out.println(name);
}
// 2. 获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回 (重点)
File[] files = f1.listFiles();
for (File file : files) {
System.out.println(file.getAbsolutePath());
}
}
}
文件搜索(案例)
import java.io.File;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
// 需求:从E:盘中,搜索"temp.txt"这个文件,找到后直接输出其位置
// 分析:
// 1. 先找到E:盘下所有的一级文件对象
// 2. 遍历全部一级文件对象,判断是否是文件
// 3. 如果是文件,判断是否是自己想要的
// 4. 如果是文件夹,需要继续进入到该文件夹,重复上述过程
String dir = "E:/"; // 要搜索的地方
String fileName = "temp.txt"; // 搜索目标
File f = new File(dir);
// 调用自己写的搜索文件方法
searchFile(f, fileName);
}
/**
* 去目录下搜索某个文件
*
* @param dir 目录
* @param fileName 要搜索的文件名称
*/
public static void searchFile(File dir, String fileName) {
// 1. 把非法的情况都拦截住
if (dir == null || !dir.exists() || dir.isFile()) {
return; // 代表无法搜索
}
// 2. 获取当前目录下的全部一级文件对象
File[] files = dir.listFiles();
// 3. 判断当前目录下是否存在一级文件对象,以及是否有权限拿到一级文件对象
if (files != null && files.length > 0) {
// 4. 遍历全部一级文件对象
for (File file : files) {
// 5. 判断文件是否是文件,还是文件夹
if (file.isFile()) {
// 6. 判断这个文件名是否是我们要找的文件
if (file.getName().contains(fileName)) {
System.out.println("检索到文件!文件路径:" + file.getAbsolutePath());
}
} else {
// 是文件夹,继续重复这个步骤
searchFile(file, fileName);
}
}
}
}
}
删除非空文件夹(案例)
import java.io.File;
public class Test {
public static void main(String[] args) {
// 删除非空文件夹,独立功能独立成方法
File dir = new File("E:/Desktop/aaa");
deleteDir(dir);
}
public static void deleteDir(File dir) {
// 判断是否合法
if (dir == null || !dir.exists()) return;
// 如果是文件,直接删除
if (dir.isFile()) {
dir.delete();
return;
}
// 如果是文件夹
File[] files = dir.listFiles();
// 是否没有操作权限?
if (files == null) return;
// 文件夹是否为空?
if (files.length == 0) {
dir.delete();
return;
}
// 文件夹:有权限且非空,先删除里面的内容,再删除自己
for (File file : files) {
if (file.isFile()) file.delete(); // 删除里面内容
else deleteDir(file); // 删除里面内容
}
dir.delete(); // 删除自己
}
}