File类的知识点及应用

/**
 * IO流
 * input
 * output
 * 1、文件 File
 * 2、Java中IO流
 *    2.1 字节流
 *    2.2 字符流
 * 3、Java中序列化和反序列化机制
 * 4、RandomAccessFile的使用
 * 5、Java8新特性 lambda表达式
 * 6、Java8新特点 stream的使用
 *
 *
 * 文件 & File类的使用
 * 1、文件的概念
 * 文件可以分为文本文件 二进制文件
 * 2、IO流的概念
 * 流是有顺序、有起点和终点的集合,是对数据传输的总称。流的本质就是用来对数据进行操作
 *
 * IO是我们实现的目的,实现这个目的需要利用的机制就是流机制
 * (从起点 读取    写入 终点)
 * 3、流的分类
 * 1)按照流向  输入流 和 输出流
 * 输入流指的是 从键盘 文件 鼠标读取到程序内存的过程
 * 输出流指的是 从程序内存写入到磁盘 打印机 文件的过程
 * 2)按照传输类型 字节流 和 字符流
 * 字节流指的是传输的数据是以字节为单位的
 * 字符流指的是传输的数据是以字符为单位的
 * 3)按照角色  节点流和处理流(装饰器设计模式)
 * 节点流指的是程序直接连接到实际的数据源
 * 处理流指的是,对节点流做了一层封装,通过封装后的流来实现数据的读取和写入功能
 *
 * 面试题:
 * 字符流和字节流的区别?
 * 1)字符数据  字符流将原始数据解释成字符序列
 * 文本数据存储依赖平台编码方式,字符流的输入和输出需要进行编码和解码的过程
 * 2)二进制数据 字节流流将原始数据解释成二进制数据
 * 读写都是以字节为单位,不需要编码和解码,比字符流效率更高
 * 可移植性高
 *
 * File类的使用
 * java.io包下 操作文件和目录  File类新建/删除/重命名,File类不能访问文件内容
 * 本身,如果需要访问文件内容本身,需要用到IO流
 *
 * public File(String pathname)
 * 路径:相对路径 绝对路径
 * 相对路径 windows不带盘符的路径表示相对路径 linux 不带/
 * .表示当前目录    ..表示上一级目录
 * 绝对路径 完整的路径名称
 *
 * boolean exist 判断当前路径是否存在
 * boolean isFile  当前路径对应是一个文件
 * boolean isDirectory 当前路径对应是一个目录
 * boolean createNewFile 在当前文件不存在的情况下,创建新文件
 * boolean isHidden 判断是否是隐藏文件
 * boolean delete 删除文件
 * file.mkdir  创建目录
 * file.getName
 * file.getAbsolutePathh
 * file.listFiles 获取当前目录下的所有文件 File[]
 * file.list 获取当前目录下的所有文件 String[]
package FFFile;

import java.io.File;
import java.io.IOException;

/**
 * @author: 贾兴伟
 * @date: Created in 17:39 2021/1/23
 */
public class TestDemo1 {


     */
        //递归删除多级目录
        public static void delete(File file){
            if(file == null || !file.exists()){
                return;
            }
            if(file.isFile()){
                file.delete();
            }else{
                //递归删除多级目录
                deleteDir(file);
            }
        }

        public static void deleteDir(File file){
            //递归的终止条件
            File[] files = file.listFiles();
            if(files == null){
                //表示当前目录是一个空目录
                //满足终止条件的返回结果
                return;
            }
            //相同逻辑
            //继续遍历该文件对象的集合
            for(File f: files){
                if(f.isFile()){
                    //该文件对象是一个文件 直接删文件
                    f.delete();
                }else{
                    deleteDir(f);
                }
            }
            file.delete(); //删除当前空的目录
        }

        public static void printJavaFile(File dir){
            if(dir == null || !dir.exists()){
                return;
            }

            File[] subFiles = dir.listFiles();
            if(subFiles == null){
                //表示dir是一个空目录
                return;
            }

            //遍历文件对象的集合,要么该文件对象对应的就是一个文件,
            //要么对应的还是一个目录
            for(File f: subFiles){
                if(f.isFile() && f.getName().endsWith(".java")){
                    System.out.println(f.getName());
                }else{
                    printJavaFile(f);
                }
            }
        }

        public static void main(String[] args) {
            //练习1: 创建两个文件对象,分别使用相对路径和绝对路径
            File file1 = new File("./a.txt"); //创建了一个文件对象,对应不会创建这样一个物理文件
            File file2 = new File("/Users/lvting/tulun/code/JAVA26/b.txt");
            //练习2:检查文件是否存在,不存在则创建文件
            if(!file1.exists()){
                try {
                    file1.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(!file2.exists()){
                try {
                    file2.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            //练习3:创建单级目录
            File file3 = new File("./aaa");
            if(!file3.exists()){
                file3.mkdir();
            }
            //练习4:创建多级目录
            File file4 = new File("./bbb");
            if(!file4.exists()){
                file4.mkdirs();
            }
            //练习5:删除文件 目录(该目录下的所有文件都删除)
            file1.delete();
            file2.delete();
            file3.delete(); //只能删除单级空目录
            //file4.delete(); //无法删除多级目录

            delete(file4);

            //练习6:获取文件名、文件大小、文件的绝对路径、父路径
            File file5 = new File("./test.txt");
            if(!file5.exists()){
                try {
                    file5.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(file5.getName());
            System.out.println(file5.length());
            System.out.println(file5.getAbsolutePath());
            System.out.println(file5.getParentFile());
            //练习7:文件 和 目录的判断
            if(file5.isFile()){
                System.out.println("fild5是一个file");
            }else{
                System.out.println("file5是一个directory");
            }
            //练习8:获取某一个目录下的所有文件
            //listFiles->返回文件对象的集合  list->文件pathName的集合
            //练习9:从键盘上输入一个路径,打印出该路径下所有.java文件
            System.out.println("output the .java file of JAVA26");
            printJavaFile(new File("/Users/lvting/tulun/code/JAVA26/"));
        }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值