`

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

    Java读取文件方法大全

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

    有效率的读取大文件(2G)

    在本篇文章中,我们将探讨几种针对大文件读取的有效策略,以确保程序性能不受影响,同时兼顾内存管理和资源优化。这里以读取5GB的TXT文件为例,讲解如何实现这一目标。 首先,我们需要理解的是,一次性加载整个大...

    java按行读取大文件并解析入库

    使用`java.nio.FileChannel`类创建一个文件通道,这允许我们以非阻塞的方式读取文件。通过`Files.newByteChannel()`方法可以从`java.nio.file.Paths`中获取文件通道。 ```java FileChannel fileChannel = Files....

    java 读取文件方法的总结

    以下是对Java读取文件的五种方法的详细说明,每种方法都有相应的代码示例: 1. **按字节读取文件内容** 这种方法适用于读取二进制文件,如图片、音频或视频文件。通过`FileInputStream`类,我们可以一次读取一个...

    Android 读写文件实例

    - 对于大文件,考虑使用`FileChannel`进行分块读写。 - 使用`try-with-resources`语句自动管理资源关闭。 以上就是Android平台上的文件读写操作的基本方法和注意事项。通过了解这些知识,开发者可以有效地在Android...

    java文件读取方法.doc

    本篇文章将详细介绍四种不同的方法来读取文件内容,包括按字节、字符、行以及随机读取。 1. **按字节读取文件内容**: 这种方法适用于读取任何类型的文件,包括二进制文件。如`FileInputStream`类用于按字节读取...

    java nio 包读取超大数据文件

    内存映射文件是一种将文件内容直接映射到内存中的技术,使得对文件的操作如同操作内存一样简单高效。下面结合给定的部分代码片段,详细解释如何使用Java NIO读取超大数据文件: 1. **初始化配置** - **定义文件...

    java读取超大文本文件

    另一种高效读取大文件的方法是通过`FileChannel`和`ByteBuffer`的组合。这种方式也支持随机访问,并且可以通过调整缓冲区大小来适应不同的内存限制。 示例代码中演示了如何使用`ByteBuffer`和`FileChannel`读取文件...

    JAVA读写二进制文件

    在Java编程语言中,处理二进制文件是常见...通过这些方法,开发者可以在Java中有效地读取和写入二进制文件,实现对各种非文本数据的处理和存储。实际应用中,还可以结合其他数据结构和算法,构建更复杂的文件处理功能。

    关于文件的读写各种方法

    这段代码创建了一个`BufferedReader`实例,通过`readLine()`方法逐行读取文本文件,并将其打印出来。记得在读写操作完成后,一定要调用`close()`方法关闭流,以释放系统资源。 对于文件写入,`PrintWriter`和`...

    java读取大文件

    通过这种方法,Java程序能够高效地处理大文件,避免一次性加载整个文件导致的内存问题,同时通过缓冲区和内存映射文件优化了读取性能。这种方法尤其适用于处理非常大的文件,如日志文件或大数据分析中的文件。

    java读取大文件大全

    通过上述分析可以看出,使用Java NIO来处理大文件是一种高效且灵活的方法。通过合理的代码设计和性能优化策略,可以极大地提高处理大文件的速度。希望本文能够帮助开发者更好地理解和应用Java中的大文件读取技术。

    IO文件读取

    读写文件时,确保正确设置文件编码,避免乱码问题;如果多个进程同时修改同一个文件,可能需要文件锁来协调。 总之,IO文件读取是程序开发的基础技能,理解并熟练掌握不同的读取方式和处理策略,有助于编写高效、...

    java基础--文件流管道.docx

    在Java NIO(New IO)框架下,文件流管道(Pipe)是一种用于在两个线程之间传递数据的机制,它允许一个线程写入数据,而另一个线程读取这些数据。文件通道(FileChannel)是与文件交互的主要接口,它提供了管道传输...

    高效率文件复制java版

    本资源主要讲解了高效率文件复制的java实现方法,包含了两种不同的实现方式,分别使用java io流和FileChannel来实现文件复制操作。 知识点1:Java IO流文件复制 在第一个实现方法中,我们使用了Java IO流来实现...

    flume中的FileChannel的优化

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

    大文件分割与合并

    在这个例子中,我们创建了一个`FileChannel`实例用于写入合并后的文件,然后遍历所有输入文件,使用`FileChannel`读取每个文件的内容,并写入到输出文件中。 **3. FileUtils类** 在给定的`FileUtils`文件名列表中,...

    android 内存 文件读写操作

    5. **文件操作注意事项**:为了保证文件操作的原子性,避免数据丢失,建议使用`FileChannel`的`transferFrom()`和`transferTo()`方法,或者使用`RandomAccessFile`进行大文件的读写。 四、SaveRead文件示例 在给定...

    java大文件读取-乔乐共享

    内存映射文件是一种特殊的文件处理方式,它能够将文件的一部分或者全部映射到内存地址空间中,从而允许程序像访问内存一样读写文件中的数据。这种方法特别适合处理大文件,因为它可以减少文件I/O操作,提高读写效率...

Global site tag (gtag.js) - Google Analytics