Java学习记录day12

day12

File类的使用

File类的一个对象,代表一个文件夹或者一个文件目录(简称文件夹)

File类中只涉及到关于文件或文件目录的创建,删除,重命名,修改时间,文件大小等方法,没有涉及到写入或读取相关方面。

File类之后会作为参数用IO流去操作文件里面的内容

创建File类的实例

File(String filePath)

File(String parentPath,String childPath)

File(File parentPath,String childPath)

相对路径:相较于某个路径下,指明的路径

绝对路径:包含盘符在内的文件或文件目录的路径

File的常用方法

public String getAbsolutePath():获取绝对路径

public String getPath():获取路径

public String getName():获取文件名

public String getParent():获取上级文件目录路径,若无返回null

public long length():获取文件长度。不能获取目录的长度

public long lastModified():获取最后修改时间,毫秒值

文件目录相关:

public String[] list():获取指定目录下的所有文件或者文件目录的名称数组

public File[] fileList():获取指定目录下的所有文件或者文件目录的file数组,能获取到完整的路径

判断功能:

public boolean isDirectory():判断文件是否是文件目录

public boolean isFile():判断是否是文件

public boolean exists():判断是否存在

public boolean canRead():判断是否可读

public boolean canWrite():判断是否可以写入

public boolean isHidden():判断是否是隐藏的

创建功能:

public boolean creatNewFile():创建文件。若文件存在,则不创建并返回false

public boolean mkdir():创建文件目录。如果此文件目录存在,就不创建,如果上级目录不存在也不创建

pulbic boolean mkdirs():创建文件目录,如果上级目录不存在,也一并创建

删除功能:

public boolean delete():删除文件或文件夹

IO流

I/O是Input/Output的缩写,主要用于处理设备之间的数据传输。

按操作数据单位不同分为:字节流(8bit)、字符流(16bit)

按数据流的流向不同分为:输入流和输出流

按流的角色的不同分为:节点流、处理流。

(抽象基类)字节流字符流
输入流InputStreamReader
输出流OutputStreamWriter

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YCUANeqW-1648904578031)(C:\Users\littlechen\AppData\Roaming\Typora\typora-user-images\image-20220331150905058.png)]

节点流

操作文本数据用字符流,操作非文本数据,如图片,媒体资源用字节流

直接在文件上操作。

字节流:FileInputStream、FileOutputSteam

字符流:FileReader、FileWriter

//复制字符文件
public void copyFile(){
    FileReader fr = null;
    FileWriter fw = null;
    try {
        File srcFile = new File("hello.txt");
        File desfFile = new File("hello2.txt");

        fr = new FileReader(srcFile);
        fw = new FileWriter(desfFile);

        char[] cbuf = new char[5];
        int len;
        while ((len = fr.read(cbuf)) != -1){
            fw.write(cbuf,0,len);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (fr != null)
                fr.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            if(fw != null)
                fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

缓冲流

BufferedInputSteam、BufferedOutputStream、BufferedReader、BufferedWriter

作用:提高流的读取、写入速度。

​ 提高了读写速度的原因,内部提供了缓冲区

处理流,就是“套”早已有流的基础上

//使用缓冲流拷贝文件
public void BufferedStreamTest(){
    BufferedInputStream bis = null;
    BufferedOutputStream bos = null;
    try {
        //造文件
        File srcFile = new File("hello.txt");
        File destFile = new File("hello3.txt");
        //造节点流
        FileInputStream fis = new FileInputStream(srcFile);
        FileOutputStream fos = new FileOutputStream(destFile);
        //造缓冲流
        bis = new BufferedInputStream(fis);
        bos = new BufferedOutputStream(fos);

        byte[] data = new byte[5];
        int len;
        while ((len = bis.read(data)) != -1){
            bos.write(data,0,len);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        //先关闭外层的流,再关闭内层的流
        //关闭外层的流的同时,也会关闭内层的流
        if(bis != null) {
            try {
                bis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if(bis != null) {
            try {
                bos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

转换流

转换流提供了字节流和字符流直接的转换

  1. 转换流:属于字符流

    InputStreamReader:将一个字节的输入流转换成字符的输入流

    OutputStreamWriter:将一个字符的输出流转换成字节的输出流

解码:字节、字节数组---->字符、字符数组

编码:字符、字符数组----->字节,字节数组

在创建构造器的时候,可以选择字符集

InputStreamReader(“hello.txt”,“UTF-8”) OutputStreamWriter(“hello_gbk.txt”,“gbk”)

数据流:DataInputStream和DataOutputStream

作用:用于读取或写出基本数据类型或字符串,将内存中的基本数据和字符串的变量的写入到文件中,也就说持久化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值