<div class="htmledit_views">html
<p>最近用nio讀取文件時,英文正常,讀取中文時會出現亂碼,經查能夠用Charset類來解決:</p> <p>代碼以下:</p> <p></p><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><b>[java]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 225px; top: 410px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_1" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_1" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=1&width=16&height=16" wmode="transparent"></div><div style="position: absolute; left: 225px; top: 410px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_3" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_3" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=3&width=16&height=16" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-j"><li class="alt"><span><span class="keyword">package</span><span> com.example.demo; </span></span></li><li class=""><span> </span></li><li class="alt"><span><span class="keyword">import</span><span> java.io.FileNotFoundException; </span></span></li><li class=""><span><span class="keyword">import</span><span> java.io.RandomAccessFile; </span></span></li><li class="alt"><span><span class="keyword">import</span><span> java.nio.ByteBuffer; </span></span></li><li class=""><span><span class="keyword">import</span><span> java.nio.CharBuffer; </span></span></li><li class="alt"><span><span class="keyword">import</span><span> java.nio.channels.FileChannel; </span></span></li><li class=""><span><span class="keyword">import</span><span> java.nio.charset.Charset; </span></span></li><li class="alt"><span><span class="keyword">import</span><span> java.nio.charset.CharsetDecoder; </span></span></li><li class=""><span> </span></li><li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">class</span><span> NioDemo { </span></span></li><li class=""><span> <span class="keyword">public</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">void</span><span> main(String[] args) { </span></span></li><li class="alt"><span> <span class="keyword">try</span><span> { </span></span></li><li class=""><span> Charset charset = Charset.forName(<span class="string">"GBK"</span><span>);</span><span class="comment">//Java.nio.charset.Charset處理了字符轉換問題。它經過構造CharsetEncoder和CharsetDecoder將字符序列轉換成字節和逆轉換。 </span><span> </span></span></li><li class="alt"><span> CharsetDecoder decoder = charset.newDecoder(); </span></li><li class=""><span> </span></li><li class="alt"><span> RandomAccessFile raf = <span class="keyword">new</span><span> RandomAccessFile(</span><span class="string">"D:\\d\\test.txt"</span><span>, </span><span class="string">"rw"</span><span>); </span></span></li><li class=""><span> FileChannel fc = raf.getChannel(); </span></li><li class="alt"><span> </span></li><li class=""><span> ByteBuffer buffer = ByteBuffer.allocate(<span class="number">512</span><span>); </span></span></li><li class="alt"><span> CharBuffer cb = CharBuffer.allocate(<span class="number">512</span><span> </span></span></li><li class=""><span> ); </span></li><li class="alt"><span> </span></li><li class=""><span> <span class="keyword">int</span><span> count = fc.read(buffer); </span></span></li><li class="alt"><span> <span class="keyword">while</span><span> (count != -</span><span class="number">1</span><span>) { </span></span></li><li class=""><span> System.out.println(<span class="string">"count = "</span><span>+count); </span></span></li><li class="alt"><span> buffer.flip(); </span></li><li class=""><span> decoder.decode(buffer, cb, <span class="keyword">false</span><span>); </span></span></li><li class="alt"><span> cb.flip(); </span></li><li class=""><span> <span class="keyword">while</span><span> (cb.hasRemaining()) { </span></span></li><li class="alt"><span> System.out.print(cb.get()); </span></li><li class=""><span> } </span></li><li class="alt"><span> System.out.println(); </span></li><li class=""><span> buffer.clear(); </span></li><li class="alt"><span> cb.clear(); </span></li><li class=""><span> count = fc.read(buffer); </span></li><li class="alt"><span> } </span></li><li class=""><span> raf.close(); </span></li><li class="alt"><span> } <span class="keyword">catch</span><span> (Exception e) { </span></span></li><li class=""><span> <span class="comment">// TODO Auto-generated catch block</span><span> </span></span></li><li class="alt"><span> e.printStackTrace(); </span></li><li class=""><span> } </span></li><li class="alt"><span> } </span></li><li class=""><span>} </span></li></ol></div><pre class="java" name="code" style="display: none;">package com.example.demo;java
import java.io.FileNotFoundException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.channels.FileChannel; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder;app
public class NioDemo { public static void main(String[] args) { try { Charset charset = Charset.forName("GBK");//Java.nio.charset.Charset處理了字符轉換問題。它經過構造CharsetEncoder和CharsetDecoder將字符序列轉換成字節和逆轉換。
CharsetDecoder decoder = charset.newDecoder();dom
RandomAccessFile raf = new RandomAccessFile("D:\\d\\test.txt", "rw"); FileChannel fc = raf.getChannel(); ByteBuffer buffer = ByteBuffer.allocate(512); CharBuffer cb = CharBuffer.allocate(512 ); int count = fc.read(buffer); while (count != -1) { System.out.println("count = "+count); buffer.flip(); decoder.decode(buffer, cb, false); cb.flip(); while (cb.hasRemaining()) { System.out.print(cb.get()); } System.out.println(); buffer.clear(); cb.clear(); count = fc.read(buffer); } raf.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
} </pre>test..txt文體以下:oop
<p></p><div class="dp-highlighter bg_plain"><div class="bar"><div class="tools"><b>[plain]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 230px; top: 1309px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_2" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_2" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=2&width=16&height=16" wmode="transparent"></div><div style="position: absolute; left: 230px; top: 1309px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_4" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_4" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=4&width=16&height=16" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1"><li class="alt"><span><span>據英國《每日快報》報道,愛因斯坦提出理論稱,經過時間旅行前往將來的一種方式就是在宇宙中以光速旅行。這個普遍接受的理論稱,實現時間旅行必須打造一艘可以以光速飛行的太空船,而且進入太空。 </span></span></li><li class=""><span> </span></li><li class="alt"><span>理論物理學家、哥倫比亞大學的briangreene稱:「你能夠打造出一艘宇宙飛船,進入太空而且以接近光速的速度旅行,轉個圈而後回來。設想一下你飛行了六個月,而後掉頭再飛六個月回來。」 </span></li></ol></div><pre class="plain" name="code" style="display: none;">據英國《每日快報》報道,愛因斯坦提出理論稱,經過時間旅行前往將來的一種方式就是在宇宙中以光速旅行。這個普遍接受的理論稱,實現時間旅行必須打造一艘可以以光速飛行的太空船,而且進入太空。this
理論物理學家、哥倫比亞大學的briangreene稱:「你能夠打造出一艘宇宙飛船,進入太空而且以接近光速的速度旅行,轉個圈而後回來。設想一下你飛行了六個月,而後掉頭再飛六個月回來。」</pre><br><br><p><br></p>spa
<p>運行結果:</p> <p><img src="https://img-blog.csdn.net/20160520134704456?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt=""><br></p> </div>.net