NIO 中文乱码问题的解决代码实现
之前在网上查询了很多关于解决NIO中文乱码的问题,仁者见仁智者见智,不过就找到的几种方法实现都太繁琐了,稍微研究了下NIO源码,以下是我自己的一种实现,偷懒用最简单的代码去实现是我的习惯!
Demo:
- String backupPath = "备份文件夹的路径";
- backupPath += File.separator + "ERROR";
- File file = new File(filePath);
- File backupDirectory = new File("需要复制的文件夹全路径");
- if(!backupDirectory.exists()) {
- backupDirectory.mkdir();
- }
- //创建临时文件
- File backupFile = new File(backupPath + File.separator + file.getName());
- backupFile.createNewFile();
- FileOutputStream fos = new FileOutputStream(backupFile, false);
- FileInputStream fis = new FileInputStream(file);
- //获取输入通道
- FileChannel fc_in = fis.getChannel();
- //获取输出通道
- FileChannel fc_out = fos.getChannel();
- //创建缓冲区
- ByteBuffer buffer = ByteBuffer.allocate(102400); //这里用1 或者 一个很大的数 比如1024比较小的数也是有几率出现乱码的
- CharBuffer charBuffer = CharBuffer.allocate(102400);
- char[] charCache = null;
- //字符编码
- Charset charset = Charset.forName("GBK");
- CharsetDecoder charDecoder = charset.newDecoder();
- //读取数据到缓冲区
- while((fc_in.read(buffer)) != -1) {
- buffer.flip();
- charDecoder.decode(buffer, charBuffer, true);
- charBuffer.flip();
- charCache = new char[charBuffer.length()];
- while (charBuffer.hasRemaining()) {
- charBuffer.get(charCache);
- String str = new String(charCache);
- System.out.println(str);
- buffer = ByteBuffer.wrap(str.getBytes());
- }
- fc_out.write(buffer);
- charBuffer.clear();
- buffer.clear();
- }
- fis.close();
- fos.close();
String backupPath = "备份文件夹的路径";backupPath += File.separator + "ERROR"; File file = new File(filePath); File backupDirectory = new File("需要复制的文件夹全路径"); if(!backupDirectory.exists()) {
backupDirectory.mkdir();
}
//创建临时文件
File backupFile = new File(backupPath + File.separator + file.getName()); backupFile.createNewFile(); FileOutputStream fos = new FileOutputStream(backupFile, false); FileInputStream fis = new FileInputStream(file);
//获取输入通道
FileChannel fc_in = fis.getChannel();
//获取输出通道
FileChannel fc_out = fos.getChannel();
//创建缓冲区
ByteBuffer buffer = ByteBuffer.allocate(102400); //这里用1 或者 一个很大的数 比如1024比较小的数也是有几率出现乱码的 CharBuffer charBuffer = CharBuffer.allocate(102400); char[] charCache = null; //字符编码
Charset charset = Charset.forName("GBK"); CharsetDecoder charDecoder = charset.newDecoder(); //读取数据到缓冲区
while((fc_in.read(buffer)) != -1) {
buffer.flip(); charDecoder.decode(buffer, charBuffer, true); charBuffer.flip(); charCache = new char[charBuffer.length()]; while (charBuffer.hasRemaining()) { charBuffer.get(charCache); String str = new String(charCache); System.out.println(str); buffer = ByteBuffer.wrap(str.getBytes());
} fc_out.write(buffer); charBuffer.clear(); buffer.clear(); } fis.close(); fos.close();</pre><br><br><p></p>
NIO 中文乱码问题的解决代码实现的更多相关文章
- Sublime Text 3中文乱码问题的解决(最有效)
Sublime Text 3中文乱码问题的解决(最有效) Sublime Text 3是很好的代码编辑器,没有之一,因为她的性感高亮代码配色,更因为它的小巧,但是它默认不支持GBK的编码格式,因此打开 ...
- jquery.ajax的url中传递中文乱码问题的解决方法
jquery.ajax的url中传递中文乱码问题的解决方法 JQuery JQuery默认的contentType:application/x-www-form-urlencoded 这才是JQu ...
- eclipse中js中文乱码问题的解决办法
在Eclipse中编辑JS文件简直是一种折磨,但是却总是很无奈得要去适应. 这里说一下Eclipse中,编辑JS文件时候,出现中文乱码问题的解决办法. 这个问题很容易想到是文件编码的问题,因此通常是修 ...
- XAMPP下MYSQL中文乱码问题的解决
XAMPP下MYSQL中文乱码问题的解决 现象描述: 安装完成XAMMP后,内置有MySQL数据库. 新建好自己的数据库后通过hibernate往表里面添加一些中文信息时全部乱码变成“??”. 问题解 ...
- Rhythmbox中文乱码问题的解决
Rhythmbox中文乱码问题的解决 Rhythmbox是Ubuntu自带的一款很优秀的音乐播放器,但是在处理中文时却不太友好,导入歌曲时中文会变成乱码 这个问题也是很好解决的. ** 1.Ctrl+ ...
- (转)MySQL 插入数据时,中文乱码问题的解决
MySQL 插入数据时,中文乱码问题的解决 原文:http://www.cnblogs.com/sunzn/archive/2013/03/14/2960248.html 当向 MySQL 数据库插 ...
- windows下mysql中文乱码, 配置解决方法
内容源自:windows下mysql中文乱码, 配置解决方法 解决方法:打开mysql安装目录,打开my.ini文件(如果只有my-default.ini文件,先将其改名为my.ini!!!) 修改内 ...
- Pycharm 输出中文或打印中文乱码现象的解决办法
1. 确保文件开头加上以下代码: # -*- coding:utf-8 -*- 还可以加上 import sys reload(sys) sys.setdefaultencoding('utf-8') ...
- get/post时中文乱码问题的解决办法
1.文章1 最近遇到一个问题:用get方法传递中文有问题,用post没有问题. 问题简单的描述是这样的: <a href="userGroup.jsp?userGroupName=&l ...
随机推荐
- django中的路由规则
项目的目录结构 外层的firstysite目录与Django无关,只是你项目的容器,可以任意重命名. #其中settings.py是django的总配置文件,即项目的总管家#urls.py,则是项目的 ...
- webpack 4.X 创建 react项目
1. 新建一个文件夹2. 运行 npm init -y 快速初始化项目3. 在跟目录创建src文件夹 dist文件夹4. 在src下创建 index.html main.js // index.htm ...
- SQL Server导入数据报错"无法在只读列“Id”中插入数据"
使用sql server 导入数据报错:无法在只读列'id'中插入数据.如下图所示: 查找出现该问题的原因是表中id为自动增长的标识列,需要在[编辑映射]中勾选"启用标识插入": ...
- TSP
#include <iostream> #include <limits.h> #include <string.h>; using namespace std; ...
- 全球城市群Megalopolis
Megalopolis From Wikipedia, the free encyclopedia (Redirected from Megalopolis (city type)) &quo ...
- js判断类型为数字的方法实现总汇——原生js判断isNumber()
方法一[推荐]: 最容易想到的是用typeof来判断是否是number类型 ,但是如果为NaN会被认为也是number类型,因此我们需要使用isNaN来排除NaN的情况. function isNum ...
- ICP算法(迭代最近点)
参考博客:http://www.cnblogs.com/21207-iHome/p/6034462.html 最近在做点云匹配,需要用c++实现ICP算法,下面是简单理解,期待高手指正. ICP算法能 ...
- qt绘制渐变区域
// 原理:通过点到线,然后叠加成区域.同理,可使用其他图形 QPainter painter(m_pWidget); QLinearGradient linearGradient(QPointF(, ...
- 关于spring中<util:/>的配置
解决redis设置缓存时间找到的帖子,我这个初学者需要学习的还是很多的. 原文地址:http://www.doc100.net/bugs/t/216322/index.html 探索<util/ ...
- 【JZOJ3213】【SDOI2013】直径
╰( ̄▽ ̄)╭ 小 Q最近学习了一些图论知识.根据课本,有如下定义. 树:无回路且连通的无向图,每条边都有正整数的权值来表示其长度.如果一棵树有N个节点,可以证明其有且仅有 N-1 条边. 路径:一棵 ...