【关于文件IO流的知识点详细整理版】

【关于文件IO流的知识点详细整理版】,第1张

IO流的定义上篇已经有过赘述,此篇主要讲他的基类和方法:

4个抽象基类:

InputStream、OutputStream、Reader、Writer


4个文件流:

FileInputStream、FileOutputStream、FileReader、FileWriter


4个缓冲流:

BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter

字节流与字符流的区别与使用情境:

    字节流:处理非文本文件时使用/如果只是对文本文件的搬运(不看),字节流也可以
    字符流: 处理文本文件时使用

转换流也属于字符流:

InputStreamReader:将InputStream转换为Reader。
OutputStreamWriter:将Writer转换为OutputStream。

字节流:

 表示字节输入流的所有类的超类:InputStream(字节输入流)

表示字节输出流的所有类的超类:OutputStream(字节输出流)

创建文件输出流以指定名称写入文件:FileOutputStream bos = new FileOutputStream("文件路径及名称");

①将所需内容写入文件:bos.write();
②将指定的字节写入此文件输出流   一次写一个字节数据:bos.write(int b)
③将 b.length字节从指定的字节数组写入此文件输出流   一次写一个字节数组数据:bos.write(byte[] b)
④将 len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流   一次写一个字节数组的部分数据:bos.write(byte[] b, int off, int len)
                追加写入: public FileOutputStream(String name,boolean append)
注:创建文件输出流以指定的名称写入文件。如果第二个参数为true ,则字节将写入文件的末尾而不是开头

⑤释放资源:bos.close();
⑥异常处理
                try-catch-finally
                    try{

    可能出现异常的代码;
}catch(异常类名 变量名){
    异常的处理代码;
}finally{
    执行所有清除 *** 作;
}

复制文件步骤:


读取数据源FileInputStream、读写数据,复制文本文件(一次读取一个字节,一次写入一个字节)、写入目的地文件FileOutputStream
例如: FileInputStream fis = new FileInputStream("文件路径");
        //根据目的地创建字节输出流对象
        FileOutputStream fos = new FileOutputStream("文件路径");

        //读写数据,复制文本文件(一次读取一个字节,一次写入一个字节)
        int by;
        while ((by=fis.read())!=-1) {
            fos.write(by);
        }

        //释放资源
        fos.close();
        fis.close();

字符流:

定义: 由于字节流 *** 作中文不是特别的方便,所以Java就提供字符流。


  字符流 = 字节流 + 编码表(字符集,包括各个国家文字符号数字等)

常见的字符集有:IASCII、GBXXX、Unicode等。

编码解码问题:

InputStreamReader:是从字节流到字符流的桥梁,它读取字节,并使用指定的编码将其解码为字符。
例如:
使用默认字符编码创建InputStreamReader对象:InputStreamReader(InputStream in) 使用指定的字符编码创建InputStreamReader对象:InputStreamReader(InputStreamin,String chatset)


OutputStreamWriter则是从字符流到字节流的桥梁

使用指定的编码将写入的字符编码为字节
使用默认字符编码创建OutputStreamWriter对象:OutputStreamWriter(OutputStream out);       使用指定的字符编码创建OutputStreamWriter对象:OutputStreamWriter(OutputStream out,String charset);

缓冲流:

定义:缓冲流是对一个已存在的流的链接和封装,通过对数据进行处理为程序提供功能强大、灵活的读写功能,提高数据流通效率,普通流在内存中设置一个缓存区,缓冲区先储存足够的待 *** 作数据后,再与内存或者磁盘进行互动。


缓冲字节流:

    BufferOutputStream
    BufferedInputStream

file类和递归思想:

定义: file类是文件和目录路径名的抽象表示,将文件和目录封装成对象,对于file而言,其封装的并不是一个真正的文件,可以是存在的也可以不存在
创建file实例:file(String pathname)
从父路径字符串和子路径名字字符串创建新的实例:File(String   parent, String child)
从父抽象路径和子路径字符串创建新的实例:File(File   parent, String child)
创建一个不存在的非空文件:public boolean createNewFile()
创建一个由此抽象路径命名的目录:public boolean mkdir()
创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录:public boolean mkdirs()
常见应用和功能
    删除(delete)、判断是否是目录、文件和是否存在(isDirectory、isFile、exists)和获取(getAbsolutePath、getPath、list、listFile)


递归指的是方法定义中调用方法本身的现象:


- 把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解
- 递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算
  定义方法然后调用方法满足需求
  注:递归一定要有出口。否则内存溢出, 递归虽然有出口,但是递归的次数也不宜过多。否则内存溢出

特殊流:

特殊的流有标准输入输出流(通常在键盘输入或有主机环境或用户指定的另一个输出源或者输出目标)、字节打印流(只负责输出数据不负责读取,永远不会抛出异常有自己特有的方法,可以改变语句输出的目的地)、字符打印流(不需要自动执行刷新)对象序列化流(将对象保存在磁盘中或者网络中传输对象,持久保存对象信息)、对象反序列化流(防止对象序列化)。


java序列化:是指对象序列化,将对象保存在磁盘中或者网络中传输对象,持久保存对象信息,反之,还可以从文件中读取回来重构对象,对他进行反序列化。

一个对象要想被序列化,该对象所属的类必须必须实现Serializable 接口
Serializable是一个标记接口,实现该接口,不需要重写任何方法
  

 如果一个对象中的某个成员变量的值不想被序列化,又该如何实现呢?


给该成员变量加transient关键字修饰,该关键字标记的成员变量不参与序列化过程

Properties集合:

① Properties作为Map集合的使用
② 是一个Map体系的集合类
③ Properties可以保存到流中或从流中加载
④属性列表中的每个键及其对应的值都是一个字符串

实例:测试小游戏运行次数

public class PropertiesTest {
    public static void main(String[] args) throws IOException {
        //从文件中读取数据到Properties集合,用load()方法实现
        Properties prop = new Properties();

        FileReader fr = new FileReader("myOtherStream\\game.txt");
        prop.load(fr);
        fr.close();

        //通过Properties集合获取到玩游戏的次数
        String count = prop.getProperty("count");
        int number = Integer.parseInt(count);

        //判断次数是否到到3次了
        if(number >= 3) {
            //如果到了,给出提示:游戏试玩已结束,想玩请充值(www.itcast.cn)
            System.out.println("游戏试玩已结束,想玩请充值(www.itcast.cn)");
        } else {
            //玩游戏
            GuessNumber.start();

            //次数+1,重新写回文件,用Properties的store()方法实现
            number++;
            prop.setProperty("count",String.valueOf(number));
            FileWriter fw = new FileWriter("myOtherStream\\game.txt");
            prop.store(fw,null);
            fw.close();
        }
    }
}

思维导图:

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/877741.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存