RandomAcessFile讀取中文亂碼的終極解決方案

來源:互聯網
上載者:User

package log;<br />import java.io.File;<br />import java.io.FileOutputStream;<br />import java.io.IOException;<br />import java.io.RandomAccessFile;<br />public class Test {</p><p>public static void main(String args[])<br />{<br />try {<br />File file=new File("log/1.txt");<br />if(!file.exists())<br />file.createNewFile();<br />FileOutputStream fos=new FileOutputStream(file);<br />fos.write("中文/t英文/r/n".getBytes());<br />fos.flush();</p><p>RandomAccessFile raf=new RandomAccessFile(file,"r");</p><p>//raf.writeUTF("中文/t英文/r/n");<br />//raf.seek(0);<br />byte buff[]=new byte[20];<br />int len=raf.read(buff);<br />//String str=new String(raf.readLine().getBytes(),"UTF16");<br />String str=new String(buff,0,len,"GBK");<br />System.out.println(str);<br />//raf.seek(raf.getFilePointer());<br />} catch (IOException e) {<br />e.printStackTrace();<br />}<br />}<br />}<br />

 

在Eclipse環境下預設編碼方式為GBK(可以設定為其他,具體方式為Window->Preference->General->Workspace中的TextfileEncoding),所以在調用檔案寫入流寫檔案時預設寫入的是GBK編碼,所以在讀取時構造讀取流時也採用GBK即可。。。

 

另外,RandomAcessFile可以設定讀取標記,依次進行讀取而不會發生重複讀取,直至檔案讀取結束:

 

raf.seek(raf.GetFilePointer());

在每次讀取之後加入以上代碼即可在下次讀寫時從上次讀取的位置進行!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.