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();
                }
            }
        }


    }
}

 

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