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

代码如下:

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

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; 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();
		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();
}
}

}

test..txt文体如下:

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

理论物理学家、哥伦比亚大学的briangreene称:“你可以打造出一艘宇宙飞船,进入太空并且以接近光速的速度旅行,转个圈然后回来。设想一下你飞行了六个月,然后掉头再飞六个月回来。”

运行结果:

nio FileChannel中文乱码问题的更多相关文章

  1. NIO 中文乱码问题的解决代码实现

    之前在网上查询了很多关于解决NIO中文乱码的问题,仁者见仁智者见智,不过就找到的几种方法实现都太繁琐了,稍微研究了下NIO源码,以下是我自己的一种实现,偷懒用最简单的代码去实现是我的习惯! Demo: ...

  2. [转]Servlet 中文乱码问题及解决方案剖析

    原文地址:http://blog.csdn.net/xiazdong/article/details/7217022/ 一.常识了解 1.GBK包含GB2312,即如果通过GB2312编码后可以通过G ...

  3. Java_Servlet 中文乱码问题及解决方案剖析

    一.常识了解 1.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立; 2.java.nio.charset.Charset.defaultCharset() 获得 ...

  4. Spring MVC3返回JSON数据中文乱码问题解决(转)

    Spring MVC3返回JSON数据中文乱码问题解决 查了下网上的一些资料,感觉比较复杂,这里,我这几使用两种很简单的办法解决了中文乱码问题. Spring版本:3.2.2.RELEASE Jack ...

  5. Servlet 中文乱码问题及解决方案剖析

    转自:http://blog.csdn.net/xiazdong/article/details/7217022/ 一.常识了解 1.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK ...

  6. 中文乱码的分析 和 从Eclipse设置启动JVM时的字符集(转)

    最近时常碰到中文乱码的问题,eclipse的编码环境设置的都是UTF-8,外部也是以UTF-8的编码进行传参的,但是遇到中文的时候还是因为乱码而产生一系列的错误.在网上查了许多资料,发现这是跟JVM的 ...

  7. Java Web项目中解决中文乱码方法总结

    一.了解常识: 1.UTF-8国际编码,GBK中文编码.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立; 2.web tomcat:默认是ISO8859-1,不 ...

  8. restTemplate.postForObject上传文件中文乱码(???.xls)

    一.问题描述 项目中, 使用restTemplate上传文件时, 文件名中文乱码, 一串问号, 源文件名为: 测试中文乱码哦哦哦.zip, 通过restTemplate.postForObject调用 ...

  9. Spring Boot 中文乱码问题解决方案汇总

    使用 Spring Boot 开发,对外开发接口供调用,传入参数中有中文,出现中文乱码,查了好多资料,总结解决方法如下: 第一步,约定传参编码格式 不管是使用httpclient,还是okhttp,都 ...

随机推荐

  1. Leetcode19.Remove Nth Node From End of List删除链表的倒数第N个节点

    给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 ...

  2. LUOGU P1053 篝火晚会 (Noip 2015 )

    题目描述 佳佳刚进高中,在军训的时候,由于佳佳吃苦耐劳,很快得到了教官的赏识,成为了"小教官".在军训结束的那天晚上,佳佳被命令组织同学们进行篝火晚会.一共有 nnn 个同学,编号 ...

  3. CSS(前)篇

    1.1CSS重点总结 1.1.1 选择器 1.1.2 盒子模型 1.1.3 浮动 1.1.4定位 1.2CSS介绍 概念: 层叠样式表或者级联样式表(Cascading Style Sheets) 层 ...

  4. web前端学习(三)css学习笔记部分(6)-- 选择器详解

    9.选择器详解 9.1  属性选择器 CSS3 属性选择器,在 CSS3 中,追加了三个属性选择器分别为:[att*=val].[att^=val]和[att$=val],使得属性选择器有了通配符的概 ...

  5. 使用openpyxl模块时出现错误: zipfile.BadZipFile: File is not a zip file

    通过Pycharm工具新建一个xlsx文件. 再通过openpyxl模块读取该表时,报错: zipfile.BadZipFile: File is not a zip file 如下所示: 解决办法: ...

  6. php收集表单数据-$GET和$POST的区别

    学习笔记: $_GET 变量 预定义的 $_GET 变量用于收集来自 method="get" 的表单中的值. 从带有 GET 方法的表单发送的信息(例如:http://www.r ...

  7. 项目管理知识图谱OR架构图

    做项目管理,心中一定要有知识图谱,科学的知识储备+100%执行力=好的管理者. 德鲁克所言:  领导是“做正确的事”,管理是“把事做正确”.

  8. SimpleDateFormat 以及java8 - DateTimeFormatter

    https://www.cnblogs.com/zhisheng/p/9206758.html 在看的过程中有这么一条: [强制]SimpleDateFormat 是线程不安全的类,一般不要定义为 s ...

  9. Spring_通过Bean的Factory配置Bean

    package com.tanlei.bean.FactoryBean; import org.springframework.beans.factory.FactoryBean; public cl ...

  10. mysqldump命令之数据库迁移

    格式说明如下: mysqldump -h源主机IP -u源主机用户 -p源主机用户密码 数据库名 | mysql -h目标主机IP -u目标主机用户 -p目标用户密码 数据库名