File与IO

课程笔记Day18

  • File类
  • IO流

第一章 File类

第01节 基础理论

File类是什么呢?

关于 文件 和 文件夹的操作。
举例:
	1. 新建文件夹
	2. 删除文件夹
	3. 移动文件夹
	4. 查看文件夹的内容
	5. 新建文件
	6. 删除文件
	7. 修改文件
	8. 查看文件信息
第02节 常用方法

构造方法

创建对象格式格式说明
File f1 = new File(“文件或者文件夹的路径”);将路径字符串,直接封装成为 File 对象
File f2 = new File(“父文件夹的路径”, “文件或文件夹的路径”);将父文件夹路径和子文件或子文件夹路径,拼接成为File对象
File f3 = new File(file对象,“子文件或文件夹的路径”);将file对象和子文件或子文件夹路径,拼接成为File对象

常用方法

1. 新增功能:
    A. boolean createNewFile()  //创建文件
    B. boolean mkdir()  //创建单级文件夹
    C. boolean mkdirs()  //创建多级文件夹
    
2. 删除功能:
	A. boolean delete()  //删除文件或者空文件夹
        
3. 查询功能:
	A. boolean exists()  //判断文件或者文件夹是否存在
 	B. boolean isDirectory()  //判断是否是文件夹
    C. boolean isFile()   //判断是否是文件
 	D. String getName()   //获取文件的名称
    E. String getPath()    //获取构造方法的路径
    F. String getAbsolutePath()   //获取绝对路径
    G. File[] listFiles()  //获取子文件的对象数组

概念两个路径

1. 相对路径
	A. 含义: 不包含盘符的路径。如果在idea当中,则相对于项目路径(省略了项目路径不写)
	B. 例如: "JavaSEDay18\\abc\\def\\A.txt"   ---》 相当于在 项目路径\\JavaSEDay18\\abc\\def\\A.txt
	C. 例如: 定浩坐在什么地方? 
			 D8存在研发八部的川哥旁边。
			 D10存在研发八部的川哥旁边。

2. 绝对路径
	A. 含义: 包含盘符的路径。
	B. 例如: C:\develop\workspace\java210712\JavaSEDay18\abc\def\A.txt
	C. 例如: 定浩坐在什么地方?
			宇宙、银河系、太阳系、地球、亚洲、中国、湖北、xxx、D8存在研发八部的川哥旁边。

listFiles注意事项

1. 如果文件对象是 文件,采用 listFiles() 方法,得到的结果是:返回值是 null
2. 如果文件对象是 空文件夹,采用 listFiles() 方法,得到的结果是: 返回值是 长度为0的数组
3. 如果文件对象是 不存在的,采用 listFiles() 方法,得到的结果是:返回值是 null
4. 如果文件对象是 系统权限文件夹,采用 listFiles() 方法,得到的结果是:返回值是 null 
第03节 递归遍历文件夹

思路

在这里插入图片描述

代码

import java.io.File;
import java.util.ArrayList;
import java.util.List; 

//递归遍历文件夹,将文件夹和文件的信息,打印输出在控制台当中
@SuppressWarnings("all")
public class Test07 {

    public static void main(String[] args) {

        //准备数据
        File f = new File("JavaSEDay18\\dir");
        List<File> dirList = new ArrayList<>();
        List<File> fileList = new ArrayList<>();
        //直接调用方法
        diGui(f,dirList,fileList);
        //查看结果
        System.out.println("文件夹的数据如下:");
        //采用lambda表达式快速遍历集合。里面使用方法引用
        dirList.forEach(System.out::println);
        System.out.println("--------------");
        System.out.println("文件的数据如下:");
        //采用lambda表达式快速遍历集合。里面使用方法引用
        fileList.forEach(System.out::println);
    }

    //定义一个递归操作的方法
    public static void diGui(File f, List<File> dirList, List<File> fileList){
        //1. 判断,如果是文件,则直接存放到集合当中
        if (f.isFile()){
            fileList.add(f);
        }

        //2. 判断,如果是文件夹,则直接存放到文件夹的集合。还需要得到子文件数组,遍历递归
        if (f.isDirectory()){
            dirList.add(f);
            //------------------
            //获取到亲儿子 子文件的对象数组
            File[] array = f.listFiles();
            //判断当前的数组是否不为空,防止空指针异常的问题
            if (array!=null){
                //增强for,获取到每一个儿子
                for (File child : array) {
                    //再次获取文件和文件夹,递归操作
                    diGui(child,dirList,fileList);
                }
            }
            //------------------
        }
    }
}

第二章 IO流

第01节 基础理论

IO流

从流向划分

1. I: in  输入(从硬盘到内存的过程) 从电脑文件到 Java程序的过程   //键盘、鼠标、扫描仪
2. O: out 输出(从内存到硬盘的过程) 从Java程序到 电脑文件的过程   //显示器、打印机

在这里插入图片描述

从数据划分

1. 字节流(byte) 操作的是 0或者1数据。 InputStream 和 OutputStream  任何数据都可以使用字节流
2. 字符流(char) 操作的是 中午、英文、符号等字符数据。 Reader 和 Writer  文本类型的数据(可以解决中文乱码问题)

在这里插入图片描述

第02节 FileOutputStream

构造方法:

方法API方法说明
FileOutputStream(String)参数1:文件的路径
FileOutputStream(String,boolean)参数1:文件的路径 参数2:是否开启追加写,默认false
FileOutputStream(File)参数1:文件的对象
FileOutputStream(File,boolean)参数1:文件的对象 参数2:是否开启追加写,默认false
1. 如果构造方法参数当中,文件不存在,则创建文件
2. 如果构造方法参数当中,文件夹不存在,则出现异常 FileNotFoundException
3. 如果构造方法参数当中,文件存在,而且文件当中有内容,创建对象的时候,会创建新的文件,覆盖之前的文件。

常用方法:

方法API方法说明
void write(int)参数1:写入的字节数据
void write(byte[])参数1:写入的字节数组数据
void write(byte[],int,int)参数1:写入的字节数组数据,参数2:开始索引,参数3:写几个数据
void close()这里的 close()方法表示断开和操作系统之间的关联关系

注意:释放资源一旦使用完毕,后面将不能继续调用 write()方法

第03节 FileInputStream

构造方法:

方法API方法说明
FileInputStream(String)参数1:文件的路径
FileInputStream(File)参数1:文件的对象

常用方法:

方法API方法说明
int read()一次读取一个字节,返回字节数据
int read(byte[])一次读取一个字节数组,返回读取的字节数组有效长度
int read(byte[],int,int)一次读取一个字节数组一部分,返回读取的字节数组长度
void close()释放资源,断开文件与程序之间的联系
第04节 文件复制案例

文件复制案例(一次一字节)

在这里插入图片描述

文件复制(一次一字节数组)

在这里插入图片描述

第05节 字节缓冲流

案例一:采用字节缓冲流一次读写一个字节复制文件

//字节缓冲流 一次一字节 复制文件
@SuppressWarnings("all")
public class Test01 {

    public static void main(String[] args) throws IOException {

        String srcPath = "JavaSEDay18\\dir\\图片1.png";
        String destPath = "JavaSEDay18\\dir\\目标图片3.png";
        //1. 创建对象
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcPath));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destPath));

        //2. 读写数据
        int ch;
        while((ch = bis.read())!=-1){
            bos.write(ch);
        }

        //3. 释放资源
        bis.close();
        bos.close();

    }
}

案例二:采用字节缓冲流一次读写一个字节数组复制文件

//字节缓冲流 一次一字节数组 复制文件
@SuppressWarnings("all")
public class Test02 {

    public static void main(String[] args) throws IOException {

        long start = System.currentTimeMillis();  //开始时间,距离1970年1月1号 00:00:00 毫秒值
        String srcPath = "JavaSEDay18\\dir\\图片1.png";
        String destPath = "JavaSEDay18\\dir\\目标图片4.png";
        //1. 创建对象
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcPath));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destPath));

        //2. 读写数据
        byte[] array = new byte[1024];
        int len;
        while ((len = bis.read(array))!=-1){
            bos.write(array,0,len);
        }

        //3. 释放资源
        bis.close();
        bos.close();
        long end = System.currentTimeMillis();  //结束时间,距离1970年1月1号 00:00:00 毫秒值
        System.out.println(end-start);

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值