zoukankan      html  css  js  c++  java
  • nio FileChannel中文乱码问题

    最近用nio读取文件时,英文正常,读取中文时会出现乱码,经查可以用Charset类来解决:

    代码如下:

    1. package com.example.demo;  
    2.   
    3. import java.io.FileNotFoundException;  
    4. import java.io.RandomAccessFile;  
    5. import java.nio.ByteBuffer;  
    6. import java.nio.CharBuffer;  
    7. import java.nio.channels.FileChannel;  
    8. import java.nio.charset.Charset;  
    9. import java.nio.charset.CharsetDecoder;  
    10.   
    11. public class NioDemo {  
    12.     public static void main(String[] args) {  
    13.         try {  
    14.             Charset charset = Charset.forName("GBK");//Java.nio.charset.Charset处理了字符转换问题。它通过构造CharsetEncoder和CharsetDecoder将字符序列转换成字节和逆转换。    
    15.             CharsetDecoder decoder = charset.newDecoder();  
    16.               
    17.             RandomAccessFile raf = new RandomAccessFile("D:\d\test.txt""rw");  
    18.             FileChannel fc = raf.getChannel();  
    19.               
    20.             ByteBuffer buffer = ByteBuffer.allocate(512);   
    21.             CharBuffer cb = CharBuffer.allocate(512  
    22.                     );  
    23.               
    24.             int count = fc.read(buffer);  
    25.             while (count != -1) {   
    26.                 System.out.println("count = "+count);   
    27.                  buffer.flip();  
    28.                  decoder.decode(buffer, cb, false);  
    29.                  cb.flip();  
    30.                  while (cb.hasRemaining()) {  
    31.                         System.out.print(cb.get());  
    32.                     }   
    33.                  System.out.println();  
    34.                 buffer.clear();  
    35.                 cb.clear();  
    36.                 count = fc.read(buffer);  
    37.             }  
    38.             raf.close();  
    39.         } catch (Exception e) {  
    40.             // TODO Auto-generated catch block  
    41.             e.printStackTrace();  
    42.         }  
    43.     }  
    44. }  
    test..txt文体如下:

    1. 据英国《每日快报》报道,爱因斯坦提出理论称,通过时间旅行前往未来的一种方式就是在宇宙中以光速旅行。这个广泛接受的理论称,实现时间旅行必须打造一艘能够以光速飞行的太空船,并且进入太空。  
    2.   
    3. 理论物理学家、哥伦比亚大学的briangreene称:“你可以打造出一艘宇宙飞船,进入太空并且以接近光速的速度旅行,转个圈然后回来。设想一下你飞行了六个月,然后掉头再飞六个月回来。”  



    运行结果:


  • 相关阅读:
    BZOJ2456
    BZOJ2648
    POJ1639
    LOJ6003
    LOJ6002
    LOJ6001
    LOJ116
    POJ2594
    BZOJ4554
    JS事件 加载事件(onload)注意:1. 加载页面时,触发onload事件,事件写在<body>标签内。 2. 此节的加载页面,可理解为打开一个新页面时。
  • 原文地址:https://www.cnblogs.com/jpfss/p/8991431.html
Copyright © 2011-2022 走看看