最全IO---输入输出流---java

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里面释放

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王某人@

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

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

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

打赏作者

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

抵扣说明:

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

余额充值