IO流,IO异常处理,Properties属性集(十四)

IO流

来操作File对象完成读取和写入
类型:字节流和字符流

  1. 字节流
    I:Input读写流,从硬盘读取到内存
    O:Ouput写入流,从内存写入硬盘持久化存储
  2. 字符流:
    Reader
    Writer

    在这里插入图片描述

字节流

java.io![在这里插入图片描述](https://img-blog.csdnimg.cn/20200318162943102.png)
字节输出流-OutputStream抽象类

java.io.OutputStream
在这里插入图片描述

  • FileOutputStreamw-文件字节输出流
    在这里插入图片描述
    使用步骤:在这里插入图片描述
    原理:在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    • 续写 和 换行写
      在这里插入图片描述
InputStream字节输入流-抽象类

在这里插入图片描述

  • FileInputStream文件字节输入流
    字节输入流的子类在这里插入图片描述
    使用步骤:在这里插入图片描述
    掌握在这里插入图片描述
    len记录的是有效读取的字节个数
    在这里插入图片描述
    读取原理:
    在这里插入图片描述
    在这里插入图片描述
  • 读取方法
    在这里插入图片描述
  • 文件复制
/*使用字节流实现文件复制
* 分析:文件复制即先读后写
* 1FileInputStream读
* 2FileOutputStream写*/
public class FileCopy {
    public static void main(String[] args) throws IOException {
        FileInputStream fis=new FileInputStream("src\\IOStream\\FileOutputStream\\a.txt");
        FileOutputStream fos=new FileOutputStream("src\\IOStream\\b.txt");
        int len=0;
        byte[] bytes=new byte[1024];
        while((len=fis.read(bytes))!=-1){
            fos.write(bytes,0,len);
            System.out.println(len);
        }
        fos.close();
        fis.close();
    }
}

  • 字节流读取中文时会出现问题UTF-8编码中一个中文3个字节读取会出现乱码

字符流

解决读取中文时出现的乱码问题

字符输入流Reader

在这里插入图片描述

FileReader文件字符输入流

在这里插入图片描述

Writer字符输出流

write后需要flush刷新缓冲在这里插入图片描述

FileWriter文件字符输出流

在这里插入图片描述

  • 使用步骤在这里插入图片描述
  • flush和close的区别在这里插入图片描述
  • 写数据的其他方法:
/*使用字符输出流写数据
* *同字节输出流不同的是,字符输出流是先写入内存中的*/
public class Demo {
    public static void main(String[] args) throws IOException {
        //创建对象
        FileWriter fw=new FileWriter("src\\IOStream\\b.txt");
        //写入单个字符
        fw.write('中');
        //flush和close区别在于flush后流还可以继续使用
        fw.flush();
        fw.write('国');
        //写入字符数组
        char[] w={',','你','最','棒','!'};;
        fw.write(w);
        //写入部分字符数组
        fw.write(w,1,3);
        //写入字符串
        fw.write("我们爱你!");
        //写入部分字符串
        fw.write("我们爱你!",0,4);
        //释放资源
        fw.close();
        //fw.write('国');//IOException: Stream closed
    }
}

  • 续写和换行在这里插入图片描述
        //构造方法中第二个boolean参数是续写开关
        FileWriter fw=new FileWriter("src\\IOStream\\b.txt",true);
        //写入单个字符
        fw.write('中');
        //flush和close区别在于flush后流还可以继续使用
        fw.flush();
        fw.write('国');
        //换行
        fw.write("\r\n");
        fw.close();

IO异常的处理

在这里插入图片描述
eg:

/*使用try_catch处理流中的异常*/
public class Demo1TryCatch {
    public static void main(String[] args) {
        //再此处声明来扩大变量作用域-赋值后方可调用方法
        FileWriter fw=null;
        try {
            fw= new FileWriter("src\\IOStream\\b.txt",true);
            for (int i = 0; i < 10; i++) {
                fw.write("Hello World!"+i+"\r\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //再此处使用try_catch来防止当fw为空时报空指针异常
            try {
                fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
  • JDK7的新特性:流对象可以自动释放
    在这里插入图片描述
    eg:
    在这里插入图片描述
  • JDK9的新特性:流对象可以自动释放在这里插入图片描述
    eg:在这里插入图片描述

Properties属性集

java.util.Properties extends Hashtable<k,v> implements Map<k,v>
在这里插入图片描述

  • 基本使用eg:在这里插入图片描述
  • 集合中的与IO有关的方法:在这里插入图片描述
  • store方法:
    在这里插入图片描述
    eg:
/*Properties属性集-->存放的时String类型的键值对
* extend Hashtable<k,v> implements Map<k,v>*/
public class PropertiesP {
    public static void main(String[] args) throws IOException {
        //创建properties对象
        Properties p=new Properties();
        //存储数据
        p.setProperty("杨航","20");
        p.setProperty("张琪","17");
        p.setProperty("杨科","13");
        //创建文件字符输出流
        FileWriter fw=new FileWriter("src\\IOStream\\b.txt");
        //创建文件字节输出流----》不能存入文字会乱码
        //\u6768\u79D1=13
        //\u5F20\u742A=17
        //\u6768\u822A=20
        FileOutputStream fos=new FileOutputStream("src\\IOStream\\b.txt");
        p.store(fos,"sava data");
        //释放流
        fw.close();
    }
}

*load方法在这里插入图片描述
eg:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值