第三次学JAVA再学不好就吃翔(part110)--使用指定的码表读写字符
学习笔记,仅供参考,有错必纠
使用指定的码表读写字符
FileReader和FileWriter是使用默认码表(比如gbk)读写文件,如果某个文件的编码表采用的不是gbk而是utf-8,则在进行读写操作时,就会出现乱码。
- 举个例子
创建一个采用utf-8编码的utf-8.txt文件:
你好你好
java代码如下:
package com.guiyang.restudy3;import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;public class D7IOtestTrans {public static void main(String[] args) throws IOException {FileReader fr = new FileReader("utf-8.txt");FileWriter fw = new FileWriter("gbk.txt");int c;while ((c = fr.read()) != -1) {fw.write(c);}fr.close();fw.close();}
}
gbk.txt:
浣犲ソ浣犲ソ
可以看到文件出现了乱码。
为了不出现乱码的状况,我们可以指定码表读取和写入,可以使用InputStreamReader和OutputStreamWriter。
InputStreamReader和OutputStreamWriter
InputStreamReader继承自java.io.Reader,它是字节流通向字符流的桥梁;OutputStreamWriter继承自java.io.Writer,它是字符流通向字节流的桥梁。
- 构造方法
InputStreamReader的构造方法:
public InputStreamReader(InputStream in, String charsetName)
创建使用指定字符集的 InputStreamReader
OutputStreamWriter的构造方法:
OutputStreamWriter(OutputStream out, String charsetName)
创建使用给定字符集的 OutputStreamWriter
- 举个例子
我们依然读取utf-8编码的utf-8.txt文件:
package com.guiyang.bean;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;public class Demo7_TransIO {public static void main(String[] args) throws IOException {InputStreamReader isr = new InputStreamReader(new FileInputStream("utf-8.txt"), "utf-8");OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("gbk.txt"), "gbk");int num;while ((num = isr.read()) != -1) {osw.write(num);}isr.close();osw.close();}
}
gbk.txt:
你好你好
很好,没有出现乱码。
第三次学JAVA再学不好就吃翔(part110)--使用指定的码表读写字符相关推荐
- 第三次学JAVA再学不好就吃翔(part106)--字符流
学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流输入流FileReader 字符流是什么 FileReader类构造方法 举个例子 字符流输出流FileWriter FileWriter构造方法 ...
- 第三次学JAVA再学不好就吃翔(part107)--字符流的拷贝
学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流的拷贝 拷贝纯文本文件 注意事项 自定义字符数组的拷贝 IO流 字符流的拷贝 拷贝纯文本文件 zzz.txt: 安徽财经大学 JAVA代码: pa ...
- 第三次学JAVA再学不好就吃翔(part46)--Scanner类
学习笔记,仅供参考 文章目录 Scanner类 Scanner获取数据出现的问题 Scanner类 概述 Scanner是在java.util包下的一个类,使用该类时我们需要导包.这个类被final修 ...
- 第三次学JAVA再学不好就吃翔(part117)--单例设计模式
学习笔记,仅供参考,有错必纠 文章目录 多线程 单例设计模式 饿汉式 懒汉式 第三种格式 Timer类 线程的五种状态 多线程 单例设计模式 单例设计模式,即保证类在内存中只有一个对象,如何保证类在内 ...
- 第三次学JAVA再学不好就吃翔(part109)--LineNumberReader类
学习笔记,仅供参考,有错必纠 IO流 LineNumberReader类 该类继承自java.io.BufferedReader,该类可以跟踪行号的缓冲字符输入流.此类定义了方法 setLineNum ...
- 第三次学JAVA再学不好就吃翔(part108)--带缓冲的字符流
学习笔记,仅供参考,有错必纠 文章目录 IO流 带缓冲的字符流 BufferedReader和BufferedWriter readLine和newLine方法 IO流 带缓冲的字符流 Buffere ...
- 第三次学JAVA再学不好就吃翔(part7)--基础语法之运算符
学习笔记,仅供参考 文章目录 JAVA基础语法 运算符 算数运算符 算术运算符 ++和-- 赋值运算符 关系运算符 JAVA基础语法 运算符 什么是运算符 就是对常量和变量进行操作的符号. 运算符的分 ...
- 第三次学JAVA再学不好就吃翔(part115)--多线程
学习笔记,仅供参考,有错必纠 文章目录 多线程 多线程引入 什么是线程 多线程并行和并发的区别 Java程序运行原理 多线程的实现方式 多线程实现的方式1 多线程程序实现的方式2 以上两种实现方式的区 ...
- 第三次学JAVA再学不好就吃翔(part113)--对象操作流
学习笔记,仅供参考,有错必纠 对象操作流 对象操作流可以将一个对象写出, 或者读取一个对象到程序中,也就是执行了序列化和反序列化的操作. 举个例子 先构造一个Role类: package com.gu ...
最新文章
- centos 7 mysql 创建用户_【CentOS 7MySQL常用操作4】,MySQL创建用户以及授权#180116
- 虚拟机类加载机制的了解
- vim和NERD树扩展 - 添加文件
- 接口api全局挂载_第 6 篇:分页接口
- HTML里的哪一部分Javascript 会在页面加载的时候被执行?
- php int 设置超时,php如何设置超时时间
- 如何在 Exchange Server 2010 SP1 下将用户邮箱导出到PST中
- 敏感词过滤,并实现替换
- 炒冷饭系列:设计模式 单例模式
- 软件巨头Salesforce带来AutoML杀手TransmogrifAI
- fmri 分析数据 fsl spm 两大平台比对
- paip.提升用户体验---文件查找
- Linux brctl 详解
- 留在一线,逃离一线?我从上海举家回成都的生活经历告诉你
- ConcurrentHashMap的put方法
- 世上只有妈妈好计算机怎么谈音乐,世上只有妈妈好的音乐教案
- 别人家的思维导图,原来这么画!
- django批量修改table_Django 使用 modelformset 组件批量修改表单数据
- Linux 命令(211)—— ssh-agent 命令
- 如何在 JupyterLab 中把 ipykernel 切换到不同的 conda 虚拟环境?
热门文章
- 深度学习(十三)——花式池化, Batch Normalization
- 在Eclipse的DDMS中查找genymotion模拟器的sdcard中的文件---开发中遇到的问题(一)
- git 清除 另一个git进程似乎在这个仓库中运行。。。。。
- 图形系统中的仿射变换
- IO多路复用原理剖析
- 《HTML5实战》——1.4 其他API和规范
- CSS魔法堂:你一定误解过的Normal flow
- 小蚂蚁学习C语言(25)——C语言结构体——使用结构体手动录入信息的小案例...
- jQuery EasyUI datagrid本地分页
- 【unity】与Android Activity交互并调用JAVA代码传递参数