11_File

基本认识

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();  // 删除自己
    }
}

你可能感兴趣的:(Java中级,java)