09【字节流、字符流】异常处理、Properties

一、IO的分类

1.输入流和输出流

输入流:从磁盘到内存

输出流:从内存到磁盘

2.字节流和字符流

字节流:以字节为单位 

字符流:以字符为单位

3.顶级父类

 

 

二、字节流

1.一切皆为字节。

2.数据追加续写

构造方法中

public FileOutputStream(File file, boolean append),append为true表示可以追加

 

字节流重要练习

package cn.work.test02;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test02 {
    /*
    1.项目根目录下建立两个文件夹:src和dest
    2.找一张图片放入src文件夹中
    3.将图片复制到dest文件夹中
     */
    public static void main(String[] args) {
        copeImage();
    }

    private static void copeImage() {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            //创建字节输入流
            fis = new FileInputStream("D:\\ideaProject\\day09\\scrs\\Image.png");
            //创建字节输出流
            fos = new FileOutputStream("D:\\ideaProject\\day09\\dest\\Image.png");
            /*
            读取图片
             */
            // 定义字节数组,作为装字节数据的容器
            byte[] arr = new byte[1024];
            // 定义变量,作为有效个数
            int len = 0;
            if ((len = fis.read(arr)) != -1) {
                //输出图片
                fos.write(arr, 0, len);
            }
        } catch (IOException e) {
            System.out.println(e);
        } finally {
            //判断流对象是否为空,防止空指针异常
            if (fis != null && fos != null) {
                //关闭流
                try {
                    fis.close();
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

三、字符流

 

字符流需要注意

flush():把缓冲区中的数据刷入硬盘

close():先把缓冲区中的数据刷入硬盘,然后再释放资源;

 

flush调用之后,还可以继续使用流对象;

close调用之后,不能继续使用流对象;

 

 

 

四、Properties类(它的父类已经淘汰,但它依然活跃在历史舞台,因为配置文件中,经常使用它)

1.Properties是一个key,value型集合

2.继承HashTable集合

3.一般用在配置文件中

 

 

Properties重要练习

package cn.work.test01;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.Scanner;
import java.util.Set;

public class Test {
    /*
    1.项目根目录下建立文件: user.txt,文件中存放用户名和登录密码,格式:用户名,密码,如:aaa=123;
    2. user.txt文件中初始存放的用户信息有如下:
        jack=123
        rose=123
        tom=123
    3.要求完成如下功能:
      程序运行时:控制台提示用户输入注册的用户名和密码;
       验证键盘录入的用户名跟user.txt中已注册的用户名是否重复:
       是:控制台提示:用户名已存在
       否:将键盘录入的用户名及密码写入user.txt文件,并在控制台提示:注册成功

     */
    public static void main(String[] args) {
        //键盘获取用户名和密码
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名");
        String username = sc.next();
        System.out.println("请输入密码");
        String password = sc.next();
        registers(username, password);
    }

    private static void registers(String username, String password) {
        FileInputStream fr = null;
        try {
            //从user.txt文件中读取数据,并存入到properties集合中
            Properties pro = new Properties();
            fr = new FileInputStream("D:\\ideaProject\\day09\\user.txt");
            pro.load(fr);
            //遍历集合判断key是否和username相同
            Set<String> set = pro.stringPropertyNames();
            for (String key : set) {
                //如果相同,提示用户名已存在
                if (key.equals(username)) {
                    System.out.println("提示用户名已存在");
                    return;
                }
            }
            //如果不相同,将数据存入propertise集合中
            pro.setProperty(username, password);
            //将pro集合,输出到user.txt文件中
            pro.store(new FileOutputStream("D:\\ideaProject\\day09\\user.txt"),"");
            System.out.println("注册成功");


        } catch (IOException e) {
            System.out.println(e);
        } finally {
            if (fr != null) {
                //关闭流
                try {
                    fr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }


    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章