字符流:
位元組流讀取文本檔案時,可能會遇到一些小問題,就是遇到中文字符時,可能不會顯示完整的字符,因為一個中文字符可能占用多個位元組儲存,所以 Java 提供了 一些字符流類,以字符作為單位讀寫資料,專門用于處理文本檔案
一個中文:GBK 占用兩個位元組,UTF-8占用三個位元組
flush 方法和 close 方法的區別
flush:重繪緩沖區,流物件可以繼續使用
close:先重繪緩沖區,然后通知系統釋放資源,流物件不可以再被使用了
續寫:
FileWriter(String filename, boolean append)
FileWriter(File file, boolean append)`
JDK1.7之前使用 try catch finally 處理流中的例外
public class Deno01TryCatch{
public static void main(String[] args){
//提高變數fw的作用域,讓finally可以使用
//變數在定義的時候,可以沒有值,但是使用的時候必須有值
//fw = new FileWriter("Demo\\t.txt",true);執行失敗fw.close會報錯
FileWriter fw = null;
try{
//可能會出現例外的代碼
fw = new FileWriter("Demo\\t.txt",true);
for(int i = 0;i<10;i++){
fw.write("Hello"+i+"\r\n");
}
}catch(IOException e){
//例外的處理邏輯
System.out.println(e);
}finally{
//一定會指定的代碼
//創建物件失敗了,fw的默認值就是null,
//不能呼叫方法,會拋出空指標例外
//需要增加一個判斷,不是把空資源釋放
if(fw!=null){
try{
//fw.close方法宣告拋出了IOException例外物件
//要么throws,要么try catch
fw,close();
}catch(IOException e){
//例外的處理邏輯
e.printStackTrace();
}
}
}
}
}
JDK7的新特性
在try的后邊可以增加一個(),在括號里可以定義流物件
那么這個流物件的作用域就在try中有效
try中的代碼執行完畢,會自動把流物件釋放,不用寫finally
格式:
try(定義流物件;定義流物件...){\
可能會出現例外的代碼
}catch(例外類變數 變數名){
例外的處理邏輯
}
public class Demo{
public static void main(String[] args){
try{//1.創建一個位元組輸入流物件,構造方法中系結要讀取的資料源
FileInputStream fis = new FileInputStream("c:\\1.jdg");
//2.創建一個位元組輸出流物件,構造方法中系結要寫入的目的地
FileOutputStream fos = new FileOutputStream("d:\\1.jdg");
//一次讀取一個位元組寫入一個位元組的方式
//3.使用位元組輸入流物件中的方法read讀取檔案
int len = 0;
while((len=fis.read())!=-1){
//使用位元組輸出流中的方法write,把讀取到的位元組寫入到目的地檔案中
fos.write(len);
}
}catch(IOException e){
//例外的處理邏輯
System.out.println(e);
}
//fos.write(1);//Stream Closed
}
}
十五、屬性集
Properties extends Hashtable<K,V> implements Map<K,V>
Properties 類表示了一個持久的屬性集,Properties 可保存在流中或從流中加載,
Properties 集合是唯一和 IO 流相結合的集合
可以使用 Properties 集合中的方法 store ,把集合中的臨時資料,持久化寫入到硬碟中存盤
可以使用 Properties 集合中的方法 load ,把硬碟中保存的檔案(鍵值對),讀取到集合中使用
屬性串列中每個鍵及其對應值都是一個字串
Properties 集合是一個雙列集合,key 和 value 默認都是字串
Object setProperty(String key, String value)呼叫 Hashtable 的方法 put
String getProperty(String key) 通過 key 找到 value 值,此方法相當于 Map 集合中的 get(key)
Set stringPropertyName() 回傳此屬性串列中的鍵集,其中該鍵及其對應值是字串此方法相當于 Map 集合中的 keySet 方法
注意:
1.存盤鍵值對的檔案中,鍵與值默認的連接符號可以使用 = ,空格(其他符號)
2.存盤鍵值對的檔案中,可以使用 # 進行注釋,被注釋的鍵值對不會再被讀取
3.存盤鍵值對的檔案中,鍵與值默認都是字串,不用再加引號
十六、緩沖流
BufferedOutputStream extends OutputStream
BufferedOutputStream:位元組緩沖輸出流
BufferedInputStream extends InputStream
BufferedInputStream:位元組緩沖輸入流
BufferedWriter extends Writer
BufferedWriter:字符緩沖輸出流
特有成員方法:
void newLine( ) 寫入一個行分隔符,會根據不同的作業系統,獲取不同的行分隔符
BufferedReader extends Reader
BufferedReader:字符緩沖輸入流
特有成員方法:
String readLine( ) 讀取一個文本行,讀取一行資料
行的中止符號:通過下列字符之一即可認為某行已終止:換行(‘\n’)、回車(’\r’)或回車后直接跟著換行(\r\n)
回傳值:
包含該行內容的字串,不包含任何終止符,如果已達流末尾,則回傳null
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/263928.html
標籤:java
