Java中IO流的知識點總結

canqz發表於2020-10-04

整體概述

系統中分為臨時儲存和硬碟兩大塊
臨時儲存:當前正在執行的程式提供資源
硬碟:檔案中的資源
IO流就是在這兩者之間進行操作的

IO流分為位元組流和字元流

  1. 位元組流:InputStream,OutputStream
  2. 字元流:Reader, Writer

位元組流

一切皆位元組

位元組輸出流OutputStream

把臨時儲存的東西存到硬碟上(檔案中)

常用方法

void writer();
void flash();
void close();

其中輸出位元組流子類中最常用的就是FileOutputStream
寫資料的時候會把97轉化為二進位制資料,然後軟體把二進位制檔案解碼成a;

//一次寫一個位元組
public void write(byte b);
//一次寫多個位元組
public void write(byte[]  bytes);
public void write(byte[]  bytes, int  offset, int len);

附加: 字串怎麼轉化為位元組陣列

byte[]  bytes = "HelloWorld".getBytes();

資料的追加,續寫

//構造方法
FileOutputStream(String pathname, boolean append);
FileOutputStream(File file, boolean append);

位元組輸入流InputSream

共有的方法

int read()// 返回值是字元的編碼值
int read(byte[]  bytes)// 返回值是陣列的長度,bytes是讀取的陣列
void close()

構造方法

FileInputStream(FIle  file);
FileInputStream(String name);

一般的讀取工作是這樣的

		FileInputStream fis = new FileInputStream("D:\\Java\\javaExmaple1\\src\\practice\\IOStream\\a.txt");
        int len = 0;
        while((len = fis.read()) != -1)
        {
            System.out.println((char) len);
        }
         fis.close(); 

附加:String類的構造方法

String(byte[]  bytes);
//比如
String s = new String(bytes);

先關閉寫的流,再關閉讀的流

字元流

分為字元輸入流和字元輸出流
Reader: 常用 FileReader
Writer: 常用FileWriter

字元輸入流Reader

通用的方法

int read();
int read(char[]  cbuf);
void close();

接下來介紹FileReader
FileReader extends InputStreamReader

構造方法

FileReader(String pathname);
FileReader(File file);

附加:
String構造方法

String(char[]  chars);
String (byte[]  bytes);

字元輸出流Writer

公用的方法
(可以直接寫如字串)

void write(char[]  cbuf);
void write(char[]  cbuf, int offset, int len);
void write(String  str);
void write(String str, int offset, int len);
void flush();//把緩衝流中的資料重新整理到臨時儲存中去
void close();

FileWriter extends OutputStreamWriter

構造方法

FileWriter(File file, boolean append);
FileWriter(String pathname,bollean append);

附加:異常處理

try{
	//可能會產生異常的程式碼
}catch(異常類變數   變數名)
{
	//異常處理邏輯
}finally{
	//一定會執行的程式碼,一般是資源釋放
}

JDK7新特性

try(定義流物件,之後會自動釋放,就不需要finally中間用分號){
	//可能會產生異常的程式碼
}catch(異常類變數   變數名)
{
	//異常處理邏輯
}

JDK9新特性

A a = new A();
B b = new B();
//這邊也是自動釋放
try(a;b){
	//可能會產生異常的程式碼
}catch(異常類變數   變數名)
{
	//異常處理邏輯
}

Properties屬性集

java.util.Properties extends Hashtable<K,V>
實現了map類的方法

有兩個特有方法

void store(OutputStream out, String comments)//後面的那個是註解的意思
void store(Writer writer,String comments);//寫入把properties實現類的物件的內容寫入writer了

void load(InputStream in);//讀出把in中的資料讀出到properties實現類的物件中
void load(Reader reader);

還有一些作為hasetable的子類的特有方法,k,v都是字串

prop.setProperty("lwt","173");//設定,存入鍵值對,相當於put

Set<String> set = prop.stringPropertyNames();//  得到鍵的集合 ,通過鍵獲取值

String value = prop.getProperty(key);//通過鍵獲取值

具體實現程式碼
(雜湊表的遍歷不能忘)

public class Demo10Property {
    public static void main(String[] args) throws IOException {
    show03();
    }

    private static void show02() throws IOException {
        Properties prop = new Properties();
        prop.setProperty("lwt","173");//設定,存入鍵值對,相當於put
        prop.setProperty("ljy","187");
        prop.setProperty("zth","184");

        FileWriter fw = new FileWriter("D:\\Java\\javaExmaple1\\src\\practice\\IOStream\\prop.txt");

        prop.store(fw,"save data");

        fw.close();
    }

    public static void show01()
    {
//        Properties繼承了HashTable
//        有三個方法
        Properties prop = new Properties();
        prop.setProperty("lwt","173");//設定,存入鍵值對,相當於put
        prop.setProperty("ljy","187");
        prop.setProperty("zth","184");

//        得到鍵的集合 ,通過鍵獲取值
        Set<String> set = prop.stringPropertyNames();

        for (String key : set) {
//            通過鍵獲取值
            String value = prop.getProperty(key);
            System.out.println(key + "=" + value);
        }
    }
    public static void show03() throws IOException {
        Properties prop = new Properties();

        prop.load(new FileReader("D:\\Java\\javaExmaple1\\src\\practice\\IOStream\\prop.txt"));
        Set<String> set = prop.stringPropertyNames();
        for (String key : set) {
            String value = prop.getProperty(key);
            System.out.println(key + "=" + value);
        }
    }
}

相關文章