JavaIO流

一、File类

        1、file类介绍

                1.它是文件和目录路径的抽象表示

                2.文件和目录是可以通过File封装成对象的

                3.对于File而言,其封装的并不是真正存在的文件,仅仅是一个路径名而已,它可以是存在的也可以不存在的,将来是要通过具体的操作把这个路径的内容转换成具体存在的。

         2、File类的构造方法

                 File:通过将给定的路径名字符串转换为抽象路径名来创建新的File实例

                1、绝对路径和相对路径

                         绝对路径: 是一个完整的路径,从盘符开始

                         相对路径: 是一个简单的路径,相对当前项目下的路径

                2、File类创建功能

                        1、方法类

                             createNewFile( ): 当该名称的文件不存在时,创建一个新空文件名,有则不创建。

                             mkdir( ):  创建该路径名命名的目录

                             mkdirs( ):  创建此路径下命名的所有目录

                3、File类删除功能

                             delete( ):  删除由此抽象路径名表示的文件或目录

                4、File类判断和获取功能

                        1、判断功能

                             isDirectory():  测试此抽象路径表示的File是否为目录

                             isFile():  测试此抽象路径名表示的File文件是否为文件

                             exists(): 测试此抽象路径名表示的File是否存在

                        2、获取功能

                             getAbsolutePath(): 返回抽象路径名的绝对路径名字符串

                             getPath(): 将此抽象路径名转换为路径名字符串

                             getName(): 返回由此抽象路径名表示的文件或目录的名称

                             listFiles(): 返回此抽象路径名表示的目录中的文件和目录的File对象数组

public class Test {
    public static void main(String[] args) throws IOException {
        File file = new File("E:\\Java\\SE\\day17\\a.txt");
        //createNewFile():当a.txt文件不存在时。创建一个新空文件,有则不创建
        boolean b = file.createNewFile();
        System.out.println("此file路径下有没有a.txt文件:"+b);
        File file1 = new File("E:\\Java\\SE\\day17\\aa");
        //创建该路径名的目录
        file1.mkdir();
        //创建此路径下命名的所有目录
        file1.mkdirs();
        //删除由此抽象路径名表示的文件或目录
        boolean delete = file1.delete();
        System.out.println("delete = " + delete);
        //判断file路径是否为目录
        boolean b1 = file.isDirectory();
        System.out.println("b1 = " + b1);
        //判断file路径名是否是文件
        boolean file2 = file.isFile();
        System.out.println("file2 = " + file2);
        //判断file路径名是否存在
        boolean exists = file.exists();
        System.out.println("exists = " + exists);
        //返回file路径名的绝对路径
        String absolutePath = file.getAbsolutePath();
        System.out.println("absolutePath = " + absolutePath);
        //返回file路径名转换为路径名字符串
        String path = file.getPath();
        System.out.println("path = " + path);
        //返回file路径名表示的文件或目录
        String name = file.getName();
        System.out.println("name = " + name);
        //file3路径名下的所有文件和目录的名称
        File file3 = new File("E:\\Java\\SE\\day17");
        for (File files : file3.listFiles()) {
            System.out.println(files.getName());
        }
    }
}

二、字节流

       1、io流概述和分类

                1、io流介绍:

                        1、io:输入/输出(input/output)

                        2、流是一种查询概念,是对数据传输的总称,也就是说数据在设备间的传输称为流,流的本质就是数据传输。

                        3、io流就是用来处理数据传输问题的常见应用,文件复制,文件上传,文件下载。

                2、io流分类:

                        1、按照数据的流向

                                1.数据流:读数据         2.输出流:写数据

                        2、按照数据类型来分

                                1.字节流(以字节byte为单位,读写数据的流)也叫万能流

                                        1.字节输入流        2.字节输出流

                                2.字符流(以字符char为单位,读写数据的流)

                                        1.字符输入流        2.字符输出流

                                3.使用场景

                                        1.如果操作的是纯文本文件,优先使用字符流

                                        2.如果操作的是图片,视频,音频等二进制文件,优先使用字节流

                                        3.如果不确定文件的类型,优先使用字节流,字节流是万能的流

                3、字节流抽象基类

                        1.Inputstream:这个抽象类是表示字节输入流的所有类的超类

                        2.outputstream: 这个抽象类是表示字节输出流的所有类的超类

                        3.子类名特点:子类名称都是以其父类作为子类的后缀 

                4、字节流功能

                        1.new Fileoutputstream() : 创建文件输出流以指定的名称写入文件

                        2.new FileInputstream():创建文件输入流以指定的名称读取文件

                        2.write():将指定的字节写入此文件输出流,一次写一个字节数据

                        3.read():从输入流读取数据的下一个字节

                 5、代码演示

                

public class Test {
    public static void main(String[] args) throws IOException {
        //读取数据
        FileInputStream input = new FileInputStream("D:\\音乐\\TGL-王者荣耀团 - 国士无双 韩信.mp3");
        //写人数据
        FileOutputStream output = new FileOutputStream("D:\\音乐\\国士无双 韩信.mp3");
        //一次读取五个字节
        byte[] bytes = new byte[5];
        int len;
        while ((len=input.read(bytes)) != -1){
            //写人数据
            output.write(bytes,0,len);
        }

    }
}

                6、字节流写数据的两个小问题

                        1、字节流写数据如何实现换行

                            1.windows\r\n        2.linux\n        3.mac\r

                        2、字节流写数据如何实现追加写入

                             1.创建文件输入流,以指定的名称写入文件,如果第二个参数为true,则字节将写入文件的末尾而不是开头

FileOutputStream output = new FileOutputStream("D:\\音乐\\国士无双 韩信.mp3",true);

三、字节缓冲流

      1、字节缓存介绍

                1.Bufferoutputstream:该类实现缓冲输出流,通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用

                2.BufferInputstream:将创建一个内部缓冲区数组,当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充一次很多字节

        2、构造方法

                slush():刷新此输出流并强制任何缓冲的输出字节被写出

                Bufferoutputstream:创建字节缓冲输出流对象

                BufferInputstream:创建字节缓冲输入流对象

        3、代码演示

public class Test3 {
    public static void main(String[] args) throws IOException {
        //字节流读
        BufferedInputStream input = new BufferedInputStream(new FileInputStream("E:\\Java\\SE\\day18\\c.txt"));
        //字节流写
        BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream("E:\\Java\\SE\\day18\\a.txt"));
        byte[] b = new byte[5];
        int len;
        while ((len=input.read(b))!= -1){
            output.write(b,0,len);
        }
        input.close();
        output.close();
    }
}

四、字符流

        1、为什么会出现字符流?

                1.字符流的介绍

                        1.由于字节流操作中文不是特别的方便,所以Java就提供了字符流

                                字符流=字节流+编码表

                 2.中文的字节在存储方式

                        1.用字节流复制文本文件时,文本文件也会有中文,但是没有问题,原因是最终底层操作会自动进行字节拼接成中文,如何识别是中文的。汉字在存储的时候,无论选择哪种编码存储,第一个字节都是负数。

                3.字符串中的编码解码问题

                        1、相关方法

                            getBytes()   使用平台的默认字符集将该string编码为一系列字节

public class Test {
    public static void main(String[] args) throws IOException {
        BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream("E:\\Java\\SE\\day17\\a.txt"));
        String s = "女孩你好";
        byte[] bytes = s.getBytes("UTF-8");
        output.write(bytes);
        output.close();
    }
}

                         2、构造方法

                            FileWriter()   根据给定的file对象构造一个Filewriter对象

                            FileReader()  在给定从中读取数据的file的情况下创建一个新FileReader

public class Test {
    public static void main(String[] args) throws IOException {
        FileReader reader = new FileReader("E:\\Java\\SE\\day17\\a.txt");
        FileWriter Writer = new FileWriter("E:\\Java\\SE\\day17\\b.txt",true);
        int len;
        while ((len= reader.read()) != -1){
            Writer.write(len);
        }
        reader.close();
        Writer.close();
    }
}

五、字符缓冲流

        1、字符缓冲流介绍

                       1.Bufferedwriter:将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入,可以指定缓冲区大小,或者可以接收默认大小,默认值足够大,可以用于大多数用途。

                       2.BuffereReader:从字符输入流读取文本,缓冲字符,数组和行的高效读取,可以指定缓冲区大小。

        2、字符缓冲流特有功能

                        1、方法介绍

                             Bufferedwriter:

                                newLine()  写入行分隔符,行分隔字符串由系统属性定义

                             BuffereReader:

                                readLine():读一行文字,结果包含行的内容的字符串,不包含任何终止字符如果已经到达则为null

六、properties集合

        1、properties介绍

                1.是一个map集合类

                2.properties可以保存到流中或从流中加载

                3.属性列表中的每个键极其对应的值都是一个字符串

         2、properties作为map集合的特有方法

                setProperty()  设置集合的键和值,都是string类型,底层调用hashtable方法put.

         3、properties和io流相结合的方法

                load()  从输入字符读取属性列表(键和元素对)

                store()  将此属性列表(键和元素对)写入此properties表中,以适合使用load()方法时格式写入输出字符流

         

public class Test5 {
    public static void main(String[] args) throws IOException {
        Properties proper = new Properties();
        FileReader reader = new FileReader("E:\\Java\\SE\\day18\\a.txt");
        //FileWriter writer = new FileWriter("E:\\Java\\SE\\day18\\b.txt");
        proper.load(reader);
        System.out.println(proper);
        Set<String> strings = proper.stringPropertyNames();
        for (String string : strings) {
            System.out.println(string);
        }
        for (String string : strings) {
            String value = proper.getProperty(string);
            System.out.println("键"+string + "值"+value);
        }
        reader.close();
        //writer.close();
    }
}

                                

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渣男あ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值