`

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  
引用

相关推荐

    NIO(byteBuffer)按行读取文件

    使用nio byteBuffer 实现按行读取文件(大文件) 在window/linux/macOS上均测试通过 对于中文乱码也已处理成功 完整注释,可随需求更改 有问题请邮件:mly610865580@126.com

    flume中的FileChannel的优化

    经过对Flume FileChannel相关源码的分析,导致FileChannel吞吐率下降的主要原因集中于事务的提交过程——commit

    muyinchen#woker#07 Java的NIO之FileChannel1

    7.1 打开一个FileChannel 7.2 从FileChannel通道中读取数据 7.3 向FileChannel中写入数据: 7.4 关闭FileCha

    javaSE 关于IO几种读取方式的性能比较

    javaSE 关于IO几种读取方式的性能比较 1.二进制数据 2.字符数据 3.压缩文件

    编写一个java应用程序将一个包含多个子目录和文件的目录复制到另外一个指定的目录下

    编写一个java应用程序,将一个包含多个子目录和文件的目录复制到另外一个指定的目录下。 实验要求 1)欲复制的目录中包含的文件数和子目录层次未知,必须在程序执行时获得这些信息。 2)显示欲复制的目录的...

    java高效文件复制.txt

    在Java编程中,复制文件的方法有很多,而且经常要用到...我以前一直是缓冲输入输出流来实现的(绝大多数人都是如此),近来在研究JDK文档时发现,用文件通道(FileChannel)来实现文件复制竟然比用老方法快了近三分之一

    【IT十八掌徐培成】Java基础第26天-06.FileChannel-RandomAccessFile-CopyFile.zip

    【IT十八掌徐培成】Java基础第26天-06.FileChannel-RandomAccessFile-CopyFile.zip

    jruby-stdin-channel:JRuby 扩展为 STDIN 公开可中断的 NIO FileChannel

    jruby-stdin-channel JRuby Java 扩展 gem,它从 Java System.in stdin 中提取可中断的FileChannel。 使用这个 gem,在阻塞read方法上调用close将解除阻塞,这与普通的 JRuby $stdin 。 使用close转义阻塞读取仅适用...

    kafka & mafka client开发与实践

    首先,kafka的开发者们认为不需要在内存里缓存什么数据,操作系统的文件缓存已经足够完善和强大,只要你不搞随机写,顺序读写的性能是非常高效的。kafka的数据只会顺序append,数据的删除策略是累积到一定程度或者...

    muyinchen#woker#06 Java的NIO之不同channel之间传输数据1

    两个通道之间传输数据的方式有两种,分别是:FileChannel 的transferFrom()方法可以将数据从源通道传输到FileChannel中(这个方法在

    java网络编程NIO视频教程

    05-Java NIO-Channel-FileChannel详解(一).mp4 06-Java NIO-Channel-FileChannel详解(二).mp4 07-Java NIO-Channel-Socket通道-概述.mp4 08-Java NIO-Channel-ServerSocketChannel.mp4 09-Java NIO-Channel-...

    ioagogo:Java IO 基准测试

    IOAGoGo! IOAGoGo 是一个使用核心 Java 中可用的各种不同方法进行基本 IO 基准测试的库。 它是可扩展的,应该可以在 Java 所在的... 这次运行表明,使用直接分配的 ByteBuffer 和 FileChannel 读取至少 32KB,但不

    qtfaststart-java:MIT许可的Java中的qt-faststart(使mp4文件可流式传输)

    我知道在GPL中还有Java的qt-faststart的另一种实现: 该库比它具有以下优点: 麻省理工学院许可。 尽可能遵循原始代码的结构。 注重表现; 使用FileChannel#transferTo而不使用String比较。 安装 可从。 ...

    Jackcess(Java的Access数据库操作库) v1.2.9

    Jackcess是一个Java 类库,用来读写微软的Access 数据库。 Jackcess 1.2.9 这个小功能版本增加了一些功能,以方便实施参照完整性和更...另一种FileChannel的实现,现在是完全基于内存在更广泛的情况下利用Jackcess.

    2021最新-Java NIO视频教程-视频教程网盘链接提取码下载 .txt

    教程内容涵盖:阻塞和非阻塞IO、Channel通道、Buffer缓冲区、Selector选择器、Pipe管道、FileLock文件锁,以及Path、Files、异步FileChannel和Charset字符编码等,并通过一个多人聊天室的综合案例,把所有的NIO知识...

    01_尚硅谷_Java NIO_课件_V1.01

    1.1 阻塞 IO 2.3 FileChannel 介绍和示例 2.4 FileChannel 操作详解

    java8源码-netty-learn:这是一个用于netty学习的工程

    中,而stream只能完成一种 常见的Channel有 FileChannel DatagramChannel (用于UDP网络编程) SocketChannel (用于TCP网络编程,客户端和服务器端都能用) ServerSocketChannel (用于TCP网络编程,专用与服务器端...

    ip地址库 很全的库

    * 用来读取QQwry.dat文件,以根据ip获得好友位置,QQwry.dat的格式是 一. 文件头,共8字节 1. 第一个起始IP的绝对偏移, 4字节 2. * 最后一个起始IP的绝对偏移, 4字节 二. "结束地址/国家/区域"记录区 四字节ip...

    mina:Java Nio Apache Mina Java Nio

    通道表示到实体,如硬件设备、文件、网络套接字或可以执行一个或多个不同 I/O 操作(如读取或写入)的程序组件的开放的连接。 在以往的java的IO操作的过程中都是面向字节流操作,并且读写操作是单向的操作,而在java...

    copy文件

    简单几行代码,实现高速coyp文件

Global site tag (gtag.js) - Google Analytics