IO檔案讀取以及解決中文亂碼

2021-09-24 18:11:34 字數 1985 閱讀 5536

一、讀取檔案內容的三種方式

1、檔案的讀取

主要介紹兩種常用的讀取方法。按行讀取和按字元塊讀取。

1.1 一次讀取一行作為輸入

//按行讀取檔案內容

public static string read1(string infile) throws exception //infile="data/in.txt"

br.close();

return sb.tostring();

}

1.2 一次讀取指定大小的字元塊

關於一次讀取乙個字元的方法就不講了,感覺這種方法效率太低了!

//以字元塊讀取檔案

public static string read2(string infile) throws exception

fis.close();

return sb.tostring();

}

2、檔案的寫入

關於檔案的寫入,主要有三種方法,分別使用filewriter、fileoutputstream和bufferedoutputstream。

根據乙個網友的測試結果,在這三種方法中,使用filewriter速度最快,而使用fileoutputstream速度最慢。

2.1 使用filewriter函式寫入資料到檔案

//效能最好

public static void write1(string file, string text) throws exception

2.2 使用fileoutputstream函式寫入

//三種方法中效能最弱

public static void write2(string file, string text) throws exception

2.3 使用bufferedoutputstream函式寫入

//這三種方法中,效能中等

public static void write3(string file, string text) throws exception

二、兩種方式:解決中文亂碼

為什麼io流讀寫中可能會出現亂碼問題?

①這個字元編碼不支援某種語言(ex:中文)

②編碼和解碼規則不一致

所以,解決方式如下:

1.利用」gbk」使字元編碼支援中文的格式

system.out.print(new string(bytes,「gbk」));

2.轉換流

出現中文亂碼的原因,大多是編碼和解碼規則不一致,利用轉換流可以有效地將字元轉換成想要的結果。

(1)編碼 : string —> byte

string中有對應的方法:

①:byte getbytes() : 使用平台的預設字符集將此 string編碼為 byte 序列

②:byte getbytes(charset charset) : 使用指定的字元編碼來編碼字串

③:byte getbytes(string charsetname) : 使用指定的字元編碼來編碼字串

(2)解碼 : byte —> string

string中有對應的構造方法:

①:string(byte bytes) : 通過使用平台的預設字符集解碼指定的 byte 陣列

②:string(byte bytes, charset charset) : 使用指定的字符集來解碼指定的byte陣列

③:string(byte bytes, string charsetname) : 使用指定的字符集來解碼指定的byte陣列

解決IO流讀取檔案亂碼問題

讀取檔案時,出現亂碼,檔案是txt格式,編碼格式預設為ansi格式,即gbk 於是轉為utf 8 inputstreamreader reader new inputstreamreader new fileinputstream new file 檔案路徑 utf 8 但是貌似不支援符號,空格等,...

QT QSettings讀取檔案中文亂碼

在寫程式的時候,有些內容是需要寫到配置檔案中的,但是有些時候我們讀出來的時候就出現了中文亂碼的情況,經過一番折騰後,發現qsettings有這麼乙個方法可以解決亂碼的問題 setinicodec qsettings configini new qsettings setting.ini qsetti...

解決使用Properties讀取中文亂碼問題

web服務返回的是多行以key和value對應的鍵值對,且編碼為utf 8。我的專案使用的編碼也是utf 8,但是我用properties讀取中文的時候,列印出來的總是亂碼。後來網上查了一下,得到如下結論 properties 預設是按iso 8859 1讀取的,所以如果你想讓它按照你想的格式顯示就...