`

FileChannel 读取中文文件解决乱码的一种方法

阅读更多
package com.lp.liuan;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;

public class FileChannelExample {
    public static void main(String args[]){
    	Charset charset = Charset.forName("GBK");//Java.nio.charset.Charset处理了字符转换问题。它通过构造CharsetEncoder和CharsetDecoder将字符序列转换成字节和逆转换。
    	CharsetDecoder decoder = charset.newDecoder();
        FileInputStream fis = null;
        try {
            fis = new FileInputStream("E:/学习总结/java乱码本质.txt");
            FileChannel fileChannel = fis.getChannel();
            ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
            CharBuffer charBuffer = CharBuffer.allocate(1024);
            int bytes = fileChannel.read(byteBuffer);
            while(bytes!=-1){
                byteBuffer.flip();
                decoder.decode(byteBuffer, charBuffer, false);
                charBuffer.flip();
              
                System.out.println(charBuffer);
                charBuffer.clear();
                byteBuffer.clear();
                bytes = fileChannel.read(byteBuffer);
            }
            if(fis!=null){
                fis.close();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 源码放在:

https://github.com/yongchunchengyc/nio/blob/master/nio/src/main/java/com/lp/liuan/FileChannelExample.java

 

java nio指导文章

 

 

 

分享到:
评论
2 楼 java_frog 2017-10-26  
可以读汉字,但一行还是分开了。
1 楼 shenselongge 2016-05-26  
引用

相关推荐

    Java读取文件方法大全

    在这个例子中,`ReadFromFile`类中包含两种读取文件的方法:一种是以字节为单位,另一种是以字符为单位。 1. **以字节为单位读取文件**: - `readFileByBytes`方法展示了如何使用`FileInputStream`读取文件。首先...

    java文件编码转换

    本篇文章将深入探讨“Java文件编码转换”这一主题,以及如何利用Java进行文件编码的转换,解决在处理文本文件时可能出现的乱码问题。 首先,我们要理解什么是字符编码。字符编码是用来表示文本的一种规则,常见的有...

    NIO学习系列:文件锁定和字符集

    总结一下,文件锁定在Java NIO中通过`FileChannel`和`FileLock`提供了一种机制,用于保护文件在并发环境下的安全访问。字符集,如`Charset`,则在处理文本数据时起到桥梁作用,确保数据在不同编码格式之间的正确转换...

    Java文件编码转换源码

    UTF-8则是一种可变长度的Unicode编码,能表示世界上几乎所有的字符。 在Java中,我们可以使用`java.nio.charset`包下的类来处理编码转换。其中,`Charset`类代表了一种字符集,`CharsetDecoder`和`CharsetEncoder`...

    JAVA IO-NIO 详解

    - **FileChannel**: 用于文件的读写操作。 - **SocketChannel**: 用于网络套接字的读写操作。 - **DatagramChannel**: 用于UDP数据报的读写操作。 **2. 使用Channel** - **FileChannel**: 可以通过...

    java gb2312_utf8

    而UTF-8是一种可变长度的Unicode编码,能表示Unicode字符集中所有的字符,包括繁体中文和许多其他语言的字符。 在Java中,处理字符编码通常涉及`java.nio.charset`包下的类,如`Charset`、`CharsetDecoder`和`...

Global site tag (gtag.js) - Google Analytics