当前位置 博文首页 > @王某人:最全IO---输入输出流---java

    @王某人:最全IO---输入输出流---java

    作者:[db:作者] 时间:2021-06-17 21:14

    IO包:

    in,out

    File类

    ? ? 文件和目录路径名的抽象表示。

    ? ?字段:

    ? ?? ?为了在不同操作系统上执行,提供了静态属性

    ? ?? ?File.pathSeparator ? ?分好

    ? ?? ?File.separator? ?? ?? ??? 斜杠

    ? 构造方法:

    ? ?? ?File?(String?pathname)

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

    ? ?? ?File?(File?parent, String?child)

    ? ?? ?? ?? ?先传过来一个文件,然后在此文件中创建文件

    ? ?? ?? ?? ?File parent 也可以是String parent ,就看是传进对象还是传进路径

    ? ?方法:

    ? ?? ?? ?? ?creatNewFile()? ? ? ? ? ? 创建成功返回True,如已经存在则返回False

    ? ?? ?? ?? ?mkdir() ? ?? ?? ?? ?? ?? ?? ?? 创建文件夹,跟名字没关系

    ? ?? ?? ?? ?mkdirs() ?? ?? ? ?? ?? ?? ? ? 创建层级目录,中间用“/”隔开

    ? ?? ?? ?? ?delete() ? ?? ?? ?? ?? ?? ?? ??删除文件,成功返回True,失败返回False

    ? ?? ?? ?? ?exists() ? ?? ?? ?? ?? ?? ?? ??判断当前文件是否存在

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

    ? ?? ?? ?? ?getName()? ?? ?? ? ???返回抽象路径的文件名称

    ? ?? ?? ?? ?getParent()? ?? ?? ???返回此抽象路径的父文件路径

    ? ?? ?? ?? ?getParentFile()? ?? ?返回父抽象路径名

    ? ?? ?? ?? ?getPath() ? ?? ?? ?? ?? ?? ?获取路径

    ? ?? ?? ?? ?length()? ?? ?? ?? ?? ?? ????文件长度(字节长度)

    ? ?? ?? ?? ?isDirectory() ? ?? ?? ? ? ?判断是否是文件夹

    ? ?? ?? ?? ?isFile() ? ?? ?? ?? ?? ?? ?? ?判断是否是文件

    ? ?? ?? ?? ?listFiles() ? ?? ?? ?? ?? ?? ?获取当前文件夹里的所有文件对象,返回抽象路径名数组

    ? ?? ?? ?? ?renameTo?(File?dest) 重命名文件

    public class Demo1 {
        public static void main(String[] args) throws IOException {
            File d = new File("D://");
            File[] files = d.listFiles();
            listFiles(files);
    
        }
        public static void listFiles(File[] files ){
            if(files!=null && files.length>0){
                for (File file: files) {
                    if (file.isFile()){
                        if (file.getName().endsWith(".png")){
                            System.out.println("找到了一个avi文件"+file.getAbsolutePath());
                        }
                    }else{
                        File[] files2 = file.listFiles();
                        listFiles(files2);
    
                    }
                }
            }
        }
    }

    文件过滤器案例:

    ?

    ?

    ? ? ?绝对路径:从盘符开始,一个完整的路径,例如:C://a.txt

    ? ? ?相对路径:在Java代码中是相对于项目目录路径,这是一个不完整的便捷路径,在开发中常用

    ?

    IO流:

    ? ? ?概述:可以将这种数据传输方式,看做是一种数据的流动,按照流动的方向分为输入Input和输出Output,Java中的IO操作主要指的是IO包下的一些常用类的使用,通过这些类,可以对数据进行读取(输入Input)和写入(输出Output)

    IO流的分类:

    ? ? ?按照传输的方向:输入流和输出流

    ? ? 按照传输数据类型:字节流和字符流

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?顶级父类

    ? ? 字节流:

    ? ? --- 输入流:? ? ?InputStream

    ? ? --- 输出流:? ? OutputStream

    ? ?字符流:

    ? ? --- 输入流:? ? ?Reader

    ? ? --- 输出流:? ? ?Writer

    ? ? 一切皆字节:计算机中任何数据都是以二进制存储

    ? ? 数据传输时,也都是以二进制方式存储的

    ? ? 后续的任何流,底层都是二进制

    OutputStream类:

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

    ? ? 方法:

    ? ? ? ? ? ?close() ? ? ? ? ? ?关闭流,使用完毕后必须关闭流

    ? ? ? ? ? ?flush() ? ? ? ? ? ?刷新此输出流并强制写出任何缓冲的输出字节。

    ? ? ? ? ? ?nullOutputStream() ? ? ? ? ? ?返回一个新的OutputStream,丢弃之前所有的字节

    ? ? ? ? ? ?write?(byte[]?b) ? ? ? ? ? ?从指定的字节数组写入到此输出流

    ? ? ? ? ? ?write?(byte[]?b, int?off, int?len) ? ? ? ? ? ?从指定字节数组的off开始的Len个字节写入到此输出流

    ? ? ? ? ? ?write(int b) ? ? ? ? ? ?将指定字节写入,24个高位被忽略

    ? ? FileOutputStream子类:

    ? ? ?构造方法:

    ? ? ? ? ? ?FileOutputStream?(File?file) ? ? ? ? ? ?创建输出流,传入指定的文件对象

    ? ? ? ? ? ?FileOutputStream?(File?file, boolean?append)? ? ? ?第二参数传入布尔值,指定是否在原

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?来的内容往后写,还是重新开始写

    ? ? ? ? ? ?FileOutputStream?(String?name)? ? ? ? ? ?创建输出流,传入指定的文件名称或路径

    ? ? ? ? ? ?FileOutputStream?(String?name,boolean append)? ? ? ? ? ? 布尔值原理同上

    ? ? ?方法:Close和write方法和OutputStream的方法相同

    InputStream类

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

    ? ? 方法:

    ? ? ? ? ? ?close() ? ? ? ? ? ?关闭流,使用完毕后必须关闭流

    ? ? ? ? ? ?read() ? ? ? ? ? ?读取字节数据,返回值为int(0-255),返回-1表示后面无数据

    ? ? ? ? ? ?read?(byte[]?b) ? ? ? ? ? ?从输入流中读取一些字节数并将它们存储到缓冲区数组 b 。

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?返回int为实际读取的字节数量,-1表示没有数据

    ? ? ? ? ? ?read?(byte[]?b, int?off, int?len)? ? ? ? ? 从此输入流数组第off开始读取len个数据

    ? ? FileInputStream子类:

    ? ? ? ?构造方法:

    ? ? ? ? ? ?FileInputStream?(File?file) 传入一个文件对象,创建一个文件的读取输入流

    ? ? ? ? ? FileInputStream?(String?name) 传入指定的文件名或对象,创建输入流

    ? ? ? 方法:

    ? ? ? ? ? ?close和read方法同InputStream的方法相同

    ?

    FileInputStream fis = new FileInputStream("D://a.txt");
    while (true){
        byte b = (byte) fis.read();
        if(b==-1){
            break;
        }
        System.out.println((char)b);
    }
    fis.close();
    
    byte[] bytes = new byte[8];
    int len = fis.read(bytes);
    System.out.println(new String(bytes,0,len));
    len = fis.read(bytes);
    System.out.println(new String(bytes,0,len));

    ? ? ? ? ? 避免出现读取长度不够,自动补齐的情况

    ?

    Writer类:

    ? ? 字符输出流,用于写入字符流的抽象类。避免字节流读取半个文字,造成乱码

    ? ? 方法:

    ? ? ? ? ? writer(char[]?cbuf) ? ? ? ? ? 写入一个数组

    ? ? ? ? ? write?(char[]?cbuf, int?off, int?len)? ? ? 写入一个数组的一部分

    ? ? ? ? ? writer(int c) ? ? ? ? ? 写入一个字符

    ? ? ? ? ? writer(String str)? ? ? ? ? 写入一个字符串

    ? ? ? ? ? write?(String?str, int?off, int?len) ? ? ? ? ? 写入一个字符串的一部分

    ? ? ? ? ? close() ? ? ? ? ? 关闭流

    ? ? ? ? ? flush() ? ? ? ? ? ? ? ? 刷新流

    ? ? ? ? ? append?(char?c)? 追加到文件

    ? ?FileWriter子类:

    ? ? ?构造方法:

    ? ? ? ? ? ?与FileoutStream的构造方法差不多,多一个

    ? ? ? ? ? ??FileWriter?(String?fileName, Charset?charset)? ? ?指定字符集去读取

    ? ? ? ? ? ??FileWriter?(String?fileName, Charset?charset, boolean?append)

    ? ? ? ? ? ?FileWriter?(File?file, Charset?charset)

    ? ? ? ? ? ?FileWriter?(File?file, Charset?charset, boolean?append)

    ? ? ?方法:

    ? ? ? ? ?同Writer

    Reader类:

    ? ? ? ?字符输入流,用于读取字符流的抽象类

    ? ? ? ?方法:

    ? ? ? ? ? ?close()? ? ?关闭流

    ? ? ? ? ? read()? ?读取一个字符

    ? ? ? ? ??read?(char[ ]?cbuf) 读取一组字符

    ? ? ? ? ?read?(char[]?cbuf, int?off, int?len) 读取一组字符的一部分

    ? ? FileReader子类:

    ? ? ? ?都也差不多

    ? ?flush()刷新管道:舒心缓存,将文字写入,close()方法会自动刷新,不刷写不进去

    ?

    转换流:

    ? ? 将字节流装饰为字符流 :使用了装饰者设计模式

    ?

    FileOutputStream fos = new FileOutputStream("D://a.txt");
    OutputStreamWriter osw = new OutputStreamWriter(fos);
    
    FileInputStream fis = new FileInputStream("D://a.txt");
    InputStreamReader isr = new InputStreamReader(fis);

    打印流:

    ? ? ? PrintStream和PrintWriter类:

    ? ? ?方法:使用print和println

    ? ? 区别:PrintWriter需要刷新管道

    ? ? ?可以将字节流转换成打印流

    缓存读取流:

    ? ? ?将字符输入流,转换为带有缓存,带有一次读一行的缓存字符读取流

    ? ? ?BufferedReader类:

    ? ? ? ? ? ? ? ?readline(): 一次读取一行 读到结尾返回null

    ? ? ?BufferedWriter类

    ? ? ? ? ? ? ?收集日常异常日志:

    ? ? ? ? ? ? ?写在try - catch 下

    ?

    PrintWriter pw = new PrintWriter("D://a.txt");
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    pw.println(sdf.format(new Date()));
    e.printStackTrace(pw);
    pw.close();

    Properties文件和Properties类:

    ? ? ? 基于Map 存储的是 键=值

    ? ? ? ? ? ? load() 可以传入字节流或者字符流,读取

    ? ? ? ? ? ?store() 将map集合所有的键值对,变成Properties文件,第二个参数是注释“#”开头

    ? ?序列化与反序列化

    ? ? ? ? 序列化:将对象存储在文件中

    ? ? ObjectOutputStream类和ObjectOutputStream类

    ? ? ? ? ?实现Serializable接口

    ? ? 部分属性序列化:

    ? ? ? ? 1.在不想被序列化的属性前加上transient修饰词

    ? ? ? ? 2.在不想被序列化的属性前加上static修饰词

    ? ? ? ? 3.在实体类中加上writeObject()和readObject()方法

    ? ? ? ? 4.Externalizable接口实现,他继承自Serializable接口,需要实现readExternal 和

    writerExternal方法

    ?

    try-with-resources

    ? ? ?在try小括号里面声明的资源,会自动在finally里面释放

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    下一篇:没有了