学习笔记,仅供参考,有错必纠


使用指定的码表读写字符

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)--使用指定的码表读写字符相关推荐

  1. 第三次学JAVA再学不好就吃翔(part106)--字符流

    学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流输入流FileReader 字符流是什么 FileReader类构造方法 举个例子 字符流输出流FileWriter FileWriter构造方法 ...

  2. 第三次学JAVA再学不好就吃翔(part107)--字符流的拷贝

    学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流的拷贝 拷贝纯文本文件 注意事项 自定义字符数组的拷贝 IO流 字符流的拷贝 拷贝纯文本文件 zzz.txt: 安徽财经大学 JAVA代码: pa ...

  3. 第三次学JAVA再学不好就吃翔(part46)--Scanner类

    学习笔记,仅供参考 文章目录 Scanner类 Scanner获取数据出现的问题 Scanner类 概述 Scanner是在java.util包下的一个类,使用该类时我们需要导包.这个类被final修 ...

  4. 第三次学JAVA再学不好就吃翔(part117)--单例设计模式

    学习笔记,仅供参考,有错必纠 文章目录 多线程 单例设计模式 饿汉式 懒汉式 第三种格式 Timer类 线程的五种状态 多线程 单例设计模式 单例设计模式,即保证类在内存中只有一个对象,如何保证类在内 ...

  5. 第三次学JAVA再学不好就吃翔(part109)--LineNumberReader类

    学习笔记,仅供参考,有错必纠 IO流 LineNumberReader类 该类继承自java.io.BufferedReader,该类可以跟踪行号的缓冲字符输入流.此类定义了方法 setLineNum ...

  6. 第三次学JAVA再学不好就吃翔(part108)--带缓冲的字符流

    学习笔记,仅供参考,有错必纠 文章目录 IO流 带缓冲的字符流 BufferedReader和BufferedWriter readLine和newLine方法 IO流 带缓冲的字符流 Buffere ...

  7. 第三次学JAVA再学不好就吃翔(part7)--基础语法之运算符

    学习笔记,仅供参考 文章目录 JAVA基础语法 运算符 算数运算符 算术运算符 ++和-- 赋值运算符 关系运算符 JAVA基础语法 运算符 什么是运算符 就是对常量和变量进行操作的符号. 运算符的分 ...

  8. 第三次学JAVA再学不好就吃翔(part115)--多线程

    学习笔记,仅供参考,有错必纠 文章目录 多线程 多线程引入 什么是线程 多线程并行和并发的区别 Java程序运行原理 多线程的实现方式 多线程实现的方式1 多线程程序实现的方式2 以上两种实现方式的区 ...

  9. 第三次学JAVA再学不好就吃翔(part113)--对象操作流

    学习笔记,仅供参考,有错必纠 对象操作流 对象操作流可以将一个对象写出, 或者读取一个对象到程序中,也就是执行了序列化和反序列化的操作. 举个例子 先构造一个Role类: package com.gu ...

最新文章

  1. centos 7 mysql 创建用户_【CentOS 7MySQL常用操作4】,MySQL创建用户以及授权#180116
  2. 虚拟机类加载机制的了解
  3. vim和NERD树扩展 - 添加文件
  4. 接口api全局挂载_第 6 篇:分页接口
  5. HTML里的哪一部分Javascript 会在页面加载的时候被执行?
  6. php int 设置超时,php如何设置超时时间
  7. 如何在 Exchange Server 2010 SP1 下将用户邮箱导出到PST中
  8. 敏感词过滤,并实现替换
  9. 炒冷饭系列:设计模式 单例模式
  10. 软件巨头Salesforce带来AutoML杀手TransmogrifAI
  11. fmri 分析数据 fsl spm 两大平台比对
  12. paip.提升用户体验---文件查找
  13. Linux brctl 详解
  14. 留在一线,逃离一线?我从上海举家回成都的生活经历告诉你
  15. ConcurrentHashMap的put方法
  16. 世上只有妈妈好计算机怎么谈音乐,世上只有妈妈好的音乐教案
  17. 别人家的思维导图,原来这么画!
  18. django批量修改table_Django 使用 modelformset 组件批量修改表单数据
  19. Linux 命令(211)—— ssh-agent 命令
  20. 如何在 JupyterLab 中把 ipykernel 切换到不同的 conda 虚拟环境?

热门文章

  1. 深度学习(十三)——花式池化, Batch Normalization
  2. 在Eclipse的DDMS中查找genymotion模拟器的sdcard中的文件---开发中遇到的问题(一)
  3. git 清除 另一个git进程似乎在这个仓库中运行。。。。。
  4. 图形系统中的仿射变换
  5. IO多路复用原理剖析
  6. 《HTML5实战》——1.4 其他API和规范
  7. CSS魔法堂:你一定误解过的Normal flow
  8. 小蚂蚁学习C语言(25)——C语言结构体——使用结构体手动录入信息的小案例...
  9. jQuery EasyUI datagrid本地分页
  10. 【unity】与Android Activity交互并调用JAVA代码传递参数