首先來說一下讀的問題。
從文件中讀取數據,有兩種方法:
一種是使用FileInputStream,一種是使用FileReader。
FileInputStream:將文件以二進制流的形式讀入到stream中,這里首先需要注意的是文件不單單指的是文本文件還包括圖片,影音等任何在計算機上存儲的文件。如果是文本文件,比如該文本的文件編碼是UTF-8編碼,則讀入的流就是文本中所有字符的UTF-8編碼的字符,如果是GBK,則讀入的文件就是GBK編碼的流。
如果想要將文件轉化為字符形式,則需要使用InputStreamReader這個類,它是字節和字符之間的橋梁。在InputStreamReader中,可以指定將字節轉化為字符的編碼形式,比如下面的一條語句。
InputStreamReader isr = new InputStreamReader(new FileInputStream(“text.txt”),”UTF-8”);就是將讀入的字節流以UTF-8的形式轉化為字符。
一般我們還會使用BufferReader這個類,這個類有很多實用性很強的函數,它以Reader作為構造函數的參數。
下面來說一下FileReader:
和FileInputStream一樣,它也是以string和file來作為自己的參數。不同的是:1,文件格式比較少,只能是文本格式,而不能是圖片或者影音等。2.如果FileReader所在的java源代碼是UTF-8格式,而讀取的文本是GBK編碼,則會出現亂碼,java源代碼和讀取的文本文件的編碼必須是一樣的,不然會出現亂碼,如果沒有中文字符,則在有的情況下是不出現亂碼的。
這里還要說一下java中的編碼格式,java涉及到兩種編碼源文件編碼和class編碼,操作系統的編碼可以不用考慮。
1,使用string.getbytes()得到的是這個string的java源文件的編碼,這里做了一個轉化,stirng在class中是unicode編碼的,先轉化為java源文件所對應的編碼,然后得到結果。
2.new string(byte[]),默認是按照java源文件的編碼來轉換。
3. char(int):