2021/07/16笔记

我们于2021/07/16 的学习目标是:IO,核心任务为:

1、学习技术:

1)、Enum枚举类

2)、File类

3)、IO流

4)、字节输入流InputStream

5)、字节输出流OutputStream

6)、字符输入流Reader

7)、字符输出流Writer

8)、字符流实现文件拷贝

2、文档总结

1)、Enum枚举类

枚举类型:描述一种事物的所有情况|所有可能|所有实例

  1. 通过enum关键字定义枚举类型
  2. 枚举的成员,字段都作为当前枚举类型的实例存在,默认被public static final修饰
  3. 定义的枚举类型都会隐式的继承自java.lang.Enum 这是所有Java语言枚举类型的公共基类
  4. 在枚举类型中构造器默认私有
//一周的中的天数 周1~周7

enum WeekDays{

    //枚举字段|当前枚举类型的实例

    MON,TUES,WED,THUR,FIR,SAT,SUN("星期天");

    // public static final WeekDay MON = new WeekDay();



    //成员变量

    private String name;



    //构造器

    private WeekDays(){}

    private WeekDays(String name){

        this.name = name;

    }



    //成员方法

    public String getName() {

        return name;

    }



    public void setName(String name) {

        this.name = name;

    }

}

2)、File类

File 路径或者文件的抽象的表现形式

注意在jav中路径的分隔符可使用: \\ / //

File(String pathname) 

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

File(File parent, String child)

从父抽象路径名和子路径名字符串创建新的 File实例。

File(String parent, String child) 

从父路径名字符串和子路径名字符串创建新的 File实例

boolean canWrite() 

测试应用程序是否可以修改此抽象路径名表示的文件。

boolean exists() 

测试此抽象路径名表示的文件或目录是否存在。

boolean setReadOnly() 

标记此抽象路径名指定的文件或目录,以便仅允许读取操作。

boolean createNewFile() 

当且仅当具有此名称的文件尚不存在时,以原子方式创建由此抽象路径名命名的新空文件

boolean delete() 

删除此抽象路径名表示的文件或目录。  空文件夹才可以删除

File getAbsoluteFile() 

返回此抽象路径名的绝对形式。

String getAbsolutePath()

返回此抽象路径名的绝对路径名字符串。

long getFreeSpace() 

通过此抽象路径名返回分区 named中未分配的字节数。

long getTotalSpace() 

通过此抽象路径名返回分区 named的大小。

String getParent() 

返回此抽象路径名父项的路径名字符串,如果此路径名未指定父目录,则返回 null 。

File getParentFile()

返回此抽象路径名父项的抽象路径名,如果此路径名未指定父目录,则返回 null 。

boolean isAbsolute() 

测试此抽象路径名是否为绝对路径。

boolean isDirectory() 

测试此抽象路径名表示的文件是否为目录。

boolean isFile()

测试此抽象路径名表示的文件是否为普通文件。

long lastModified()

返回上次修改此抽象路径名表示的文件的时间。

long length() 

返回此抽象路径名表示的文件的长度。

String[] list() 

返回一个字符串数组,用于命名此抽象路径名表示的目录中的文件和目录。

File[] listFiles()

返回一个抽象路径名数组,表示此抽象路径名表示的目录中的文件。

boolean mkdir()

创建此抽象路径名指定的目录。

boolean mkdirs()

创建此抽象路径名指定的目录,包括任何必需但不存在的父目录

boolean renameTo(File dest)

重命名此抽象路径名表示的文件

3)、IO流

流:管道,数据以先入先出的方式进行流动

流动方向:数据源à数据à目的地

IO包:包含一系列IO相关类及方法

流的分类:

按照流向分:输入流 输出流

按照操作单元分:字节流(万能流,任意内容都能转为字节) 字符流(只能传输纯文本的内容)

按照功能分:节点流(真实做读入写出的流) 功能流(增强节点流的功能,加强性能)

分类之间是相辅相成的

字节流由分为字节输入流InputString和字节输出流OutputString。

字节输入流 InputStream:

有文件字节输入流 FileInputStream,属于输入流,字节流和节点流。包含读入(read)和关闭(close)功能。也有字节输出流(OutputStream)。

          

import java.io.*;

public class IO {

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

        //FileInputStream(File file) 通过打开与实际文件的连接来创建 FileInputStream ,该文件由文件系统中的 File对象 file命名。

        File src = new File("D://sample.txt"); //数据源

        //创建流

        InputStream is = new FileInputStream(src);

        //读入数据 int read() 从此输入流中读取一个字节的数据。  读到文件末尾返回-1

        int num = is.read();

        //处理数据

        System.out.println((char)num);

        System.out.println((char)(is.read()));

        System.out.println((char)(is.read()));

        System.out.println(is.read());

        //关闭流

        is.close();

    }

}

4)、InputStream

read() 从此输入流中读取一个字节的数据。

读到文件末尾返回-1

每次读取一个字节,重复通过循环读入,可以简化代码结构

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;



public class Class002_IO {

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

        //创建流

        //FileInputStream (String name) 通过打开与实际文件的连接来创建 FileInputStream ,该文件由文件系统中的路径名 name命名。

        InputStream is = new FileInputStream("D://sample.txt");

        //读入数据

        int num = -1;

        while((num=is.read())!=-1){

            //处理数据

            System.out.println((char)num);

        }

        //关闭流

        is.close();

    }

}

read()  每次读取一个字节,重复通过循环读入,效率较低

   int read(byte[] b)  每次读入一个字节数组的数据,重复循环读入

    返回值: 返回读入到字节数组中数据的个数 ,没有读到返回-1

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.util.Arrays;

public class Class003_IO {

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

        //1.构建流

        InputStream is = new FileInputStream("D://test2.txt");



        //2.准备卡车-->字节数组

        byte[] car = new byte[1024];



        //3.读入

        int len = -1;

        while((len=is.read(car))!=-1){

            //4.处理数据

            System.out.println(new String(car,0,len));;

        }



        //5.关闭

        is.close();

    }

}

   public byte[] readAllBytes() throws IOException

    从输入流中读取所有剩余字节。 此方法将阻塞,直到读取了所有剩余字节并检测到流结束,或者抛出异常。 此方法不会关闭输入流。

    当此流到达流的末尾时,此方法的进一步调用将返回空字节数组。

    请注意,此方法适用于方便将所有字节读入字节数组的简单情况。 它不用于读取包含大量数据的输入流。

           起始版本: java9

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.util.Arrays;

public class Class004_IO {

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

        //1.构建流

        InputStream is = new FileInputStream("D://test2.txt");



        //2.读入所有数据

        byte[] arr = is.readAllBytes();

        //3.处理数据

        System.out.println(new String(arr));



        //4.关闭

        is.close();

    }

}

5)、OutputStream

   字节输出流

    OutputStream 此抽象类是表示输出字节流的所有类的超类。

    FileOutputStream : 文件输出流,将数据写出到指定文件中

    注意:

        如果目的地文件不存在,系统会自动创建

        输出流如果目的地文件存在,内容默认覆盖,设置追加

import java.io.*;



public class Class005_IO {

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

        //1.定义输出流

        //FileOutputStream(String name)

        //FileOutputStream(File file)

        //FileOutputStream(File file, boolean append) 创建文件输出流以写入由指定的 File对象表示的文件。

        //FileOutputStream(String name, boolean append) 创建文件输出流以写入具有指定名称的文件。

        OutputStream os = new FileOutputStream("D://test.txt",true);



        //2.准备数据

        byte[] car = "DataString".getBytes();



        //3.写出

        //write(int b) 将指定的字节写入此文件输出流。

        //void write(byte[] b) 将指定字节数组中的 b.length字节写入此文件输出流。

        //void write(byte[] b, int off, int len) 将从偏移量 off开始的指定字节数组中的 len字节写入此文件输出流。

        os.write(97);

        os.write(car);



        //4.刷出

        os.flush();



        //5.关闭

        os.close();

    }

}

6)、字符输入流Reader

只能读写纯文本数据, 字符输入流的父类

FileReader 文件字符输入流,包含read() read(char[]) close()


import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

import java.io.Reader;

public class Class001_IO {

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

        //1.创建流

        //FileReader(String fileName)

        //FileReader(File file)

        Reader rd = new FileReader("D://test.txt");



        //2.读入

        //char ch = (char)(rd.read());

        //小汽车

        char[] car = new char[1024];



        //循环读入

        int len = -1;

        while((len = rd.read(car))!=-1){

            //3.处理数据

            System.out.println(new String(car,0,len));

        }



        //4.关闭

        rd.close();

    }

}

7)、字符输出流Writer

字符输出流抽象父类

FileWriter 文件字符输出流,包含write() flush() close()

import java.io.FileWriter;

import java.io.IOException;

import java.io.Writer;

public class Class002_IO {

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

        //1.创建流

        //FileWriter(File file)

        //FileWriter(String fileName)

        //FileWriter(File file, boolean append)

        //FileWriter(String fileName, boolean append)

        Writer rt = new FileWriter("D://test.txt",true);



        //2.准备数据

        String msg = "今天也要加油鸭!!!";



        //3.写出

        rt.write(msg);



        //4.刷出

        rt.flush();



        //5.关闭

        rt.close();

    }

}

8)、字符流实现文件拷贝

只能为纯文本文件

import java.io.*;

public class Class003_IO {

    public static void main(String[] args){

        //1.创建流

        Reader rd = null;

        Writer rt = null;

        try {

            rd= new FileReader("D://test.txt");

            rt = new FileWriter("D://hehe.txt");

            //2.读入,写出

            char[] car = new char[1024];

            int len = -1;

            while((len = rd.read(car))!=-1){

                rt.write(car,0,len);

            }



            //3.刷出

            rt.flush();

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        } finally {

            //4.关闭

            if(rt!=null){

                try {

                    rt.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

            if(rd!=null){

                try {

                    rd.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

        }

    }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值