1. 程式人生 > >JavaI/O中使用readUTF()報java.io.EOFException暫時解決方案

JavaI/O中使用readUTF()報java.io.EOFException暫時解決方案

練習JavaI/O時自己試著寫demo,當使用RandomAccessFile的readUTF()方法時報java.io.EOFException。原始碼如下: DirList.java

a.txt檔案內容如下:

執行程式,輸出結果如下:

檢視輸出結果,並且與輸出語句一一對應,發現英文沒有問題,只有在遇到中文的時候報java.io.EOFException。 跟蹤錯誤,發現是在呼叫DataInput介面的readFully(byte b[], int off, int len)方法處丟擲的異常,繼續檢視readFully()方法,找到了關於該方法報EOFException異常的說明:

這裡寫圖片描述

意思是當輸入流還沒有讀完所有位元組時就到達了末尾。理解不了。 轉去查閱部落格,有的說是因為沒有關閉輸入流,只要使用外流過後呼叫close()方法關閉流即可,但是檢查我的程式碼,發現並不符合,我最後是呼叫了close()方法的。 另一篇部落格中寫道,readUTF()方法只能讀入UTF編碼的字元,

新航道英語而中文字元並不一定就是UTF編碼,在windows系統中,建立txt檔案預設的編碼是ANSI編碼!結果去查看了a.txt的編碼,發現就是UTF-8。也不是這個原因。

暫時找不出出錯的原因,以後能力夠了再回頭解決。

使用readLine()方法而不是readUTF()方法讀取中文:

首先使用String的getBytes(Charset)方法獲得讀取行的ISO-8859-1編碼的位元組陣列,在通過String的構造器String(byte[],Charset)將該陣列重新編碼成UTF-8的字串。 新的方法

輸出結果