热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java学习笔记③③(转换流、字符编码和字符集、编码引出的问题、InputStreamReader类、OutputStreamWriter类、练习:转换文件编码)

一、转换流1.字符编码和字符集字符编码:就是一套自然语言的字符与二进制数之间的对应规则编码表:生活中文字和计算机中二进制的对应规则字符集:也叫编码表。是一个系统支持的所有字符的集合

一、转换流

1. 字符编码和字符集
《Java学习笔记③③(转换流、字符编码和字符集、 编码引出的问题、InputStreamReader类、OutputStreamWriter类、练习:转换文件编码)》
《Java学习笔记③③(转换流、字符编码和字符集、 编码引出的问题、InputStreamReader类、OutputStreamWriter类、练习:转换文件编码)》

字符编码:就是一套自然语言的字符与二进制数之间的对应规则
编码表:生活中文字和计算机中二进制的对应规则
字符集:也叫编码表。是一个系统支持的所有字符的集合,包括各国家文字、标点符号、图形符号、数字等

《Java学习笔记③③(转换流、字符编码和字符集、 编码引出的问题、InputStreamReader类、OutputStreamWriter类、练习:转换文件编码)》
《Java学习笔记③③(转换流、字符编码和字符集、 编码引出的问题、InputStreamReader类、OutputStreamWriter类、练习:转换文件编码)》
《Java学习笔记③③(转换流、字符编码和字符集、 编码引出的问题、InputStreamReader类、OutputStreamWriter类、练习:转换文件编码)》2. 编码引出的问题
《Java学习笔记③③(转换流、字符编码和字符集、 编码引出的问题、InputStreamReader类、OutputStreamWriter类、练习:转换文件编码)》
3. InputStreamReader类
《Java学习笔记③③(转换流、字符编码和字符集、 编码引出的问题、InputStreamReader类、OutputStreamWriter类、练习:转换文件编码)》
《Java学习笔记③③(转换流、字符编码和字符集、 编码引出的问题、InputStreamReader类、OutputStreamWriter类、练习:转换文件编码)》
《Java学习笔记③③(转换流、字符编码和字符集、 编码引出的问题、InputStreamReader类、OutputStreamWriter类、练习:转换文件编码)》

package Day01.demo03;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
/* java.io.InputStreamReader extends Reader InputStreamReader:是字节流通向字符流的桥梁;它使用指定的charset读取字节并将其解码为字符。 (解码:把看不懂的变成能看懂的) 继承自父类的共性成员方法: int read() 读取单个字符并返回 int read(char[] cbuf)一次读取多个字符,将字符读入数组 void close()关闭该流并释放与之关联的所有资源 构造方法: InputStreamReader(InputStream in)创建一个使用默认字符集的InputStreamReader InputStreamReader(InputStream in,String charsetName)创建使用指定字符集的InputStreamReader 参数: InputStream in:字节输入流,可以用来读取文件中保存的字节 String charsetName:指定的编码表名称,不区分大小写,可以是utf-8/UTF-8,gbk/GBK,...不指定默认使用UTF-8 使用步骤: 1.创建InputStreamReader对象,构造方法中传递字节输入流和指定的编码表名称 2.使用InputStreamReader对象中的方法read读取文件 3.释放资源 注意事项: 构造方法中指定的编码表名称要和文件的编码相同,否则会发生乱码 */
public class Demo03InputStreamReader {
public static void main(String[] args) throws IOException {
//read_utf_8();
read_gbk();
}
/* 使用InputStreamReader读取GBK格式的文件 */
private static void read_gbk() throws IOException {
//1.创建InputStreamReader对象,构造方法中传递字节输入流和指定的编码表名称
//InputStreamReader isr = new InputStreamReader(new FileInputStream("10_IO_gbk_8.txt"),"UTF-8");//???
InputStreamReader isr = new InputStreamReader(new FileInputStream("10_IO_gbk_8.txt"),"GBK");
//2.使用InputStreamReader对象中的方法read读取文件
int len = 0;
while((len = isr.read())!=-1){
System.out.println((char)len);
}
//3.释放资源
isr.close();
}
/* 使用InputStreamReader读取UTF-8格式的文件 */
/*private static void read_utf_8() throws IOException { //1.创建InputStreamReader对象,构造方法中传递字节输入流和指定的编码表名称 //InputStreamReader isr = new InputStreamReader(new FileInputStream("10_IO_utf_8.txt"),"UTF-8"); InputStreamReader isr = new InputStreamReader(new FileInputStream("10_IO_utf_8.txt"));//不指定默认使用UTF-8 //2.使用InputStreamReader对象中的方法read读取文件 int len = 0; while((len = isr.read())!=-1){ System.out.println((char)len); } //3.释放资源 isr.close(); }*/
}

运行结果:
《Java学习笔记③③(转换流、字符编码和字符集、 编码引出的问题、InputStreamReader类、OutputStreamWriter类、练习:转换文件编码)》

4. OutputStreamWriter类

package Day01.demo03;
import java.io.*;
/* java.io.OutputStreamWriter extends Writer OutputStreamWriter:是字符流通向字节流的桥梁;可使用指定的charset将要写入流中的字符编码成字节。 (编码:把能看懂的变成看不懂) 继续自父类的共性成员方法: void write(int c)写入单个字符 void write(char[] cbuf)写入字符数组 abstract void write(char[] cbuf,int off,int len)写入字符数组的某一部分,off字符串的开始索引,len写的字符个数 void write(String str)写入字符串 void write(String str,int off,int len)写入字符串的某一部分,off字符串的开始索引,len写的字符个数 void flush()刷新该流的缓冲 void close()关闭该流,但要先刷新它 构造方法: OutputStreamWriter(OutputStream out)创建使用默认字符编码的OutputStreamwriter OutputStreamWriter(OutputStream out,String charsetName)创建使用指定字符集的OutputStreamwriter 参数: OutputStream out:字节输出流,可以用来写转换之后的字节到文件中 String charsetName:指定的编码表名称,不区分大小写,可以是utf-8/UTF-8,gbk/GBK,...不指定默认使用UTF-8 使用步骤: 1.创建OutputStreamwriter对象,构造方法中传递字符输出流和指定的编码表名称 2.使用OutputStreamwriter对象中的方法writer,把字符转换为字节存储缓冲区中(编码) 3.使用OutputStreamwriter对象中的方法flush,把内存缓冲区中的字节刷新到文件中(使用字节流写字节的过程) 4.释放资源 */
public class Demo03OutputStreamWriter {
public static void main(String[] args) throws IOException {
//write_utf_8();
write_gbk();
}
/* 使用转换流OutputStreamwriter写UTF-8格式的文件 */
private static void write_gbk() throws IOException {
//1.创建OutputStreamwriter对象,构造方法中传递字符输出流和指定的编码表名称
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("10_IO_gbk_8.txt"),"utf-8");
//2.使用OutputStreamwriter对象中的方法writer,把字符转换为字节存储缓冲区中(编码)
osw.write("你好");
//3.使用OutputStreamwriter对象中的方法flush,把内存缓冲区中的字节刷新到文件中(使用字节流写字节的过程)
osw.flush();
//4.释放资源
osw.close();
}
/* 使用转换流OutputStreamwriter写UTF-8格式的文件 */
/*private static void write_utf_8() throws IOException { //1.创建OutputStreamwriter对象,构造方法中传递字符输出流和指定的编码表名称 OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("10_IO_utf_8.txt"),"utf-8"); //2.使用OutputStreamwriter对象中的方法writer,把字符转换为字节存储缓冲区中(编码) osw.write("你好"); //3.使用OutputStreamwriter对象中的方法flush,把内存缓冲区中的字节刷新到文件中(使用字节流写字节的过程) osw.flush(); //4.释放资源 osw.close(); }*/
}

运行结果:
《Java学习笔记③③(转换流、字符编码和字符集、 编码引出的问题、InputStreamReader类、OutputStreamWriter类、练习:转换文件编码)》
《Java学习笔记③③(转换流、字符编码和字符集、 编码引出的问题、InputStreamReader类、OutputStreamWriter类、练习:转换文件编码)》

5. 练习:转换文件编码

package Day01.demo03;
import java.io.*;
/* 练习:转换文件编码 将GBK编码的文本文件,转换为UTF-8编码的文本文件 分析: 1.创建InputStreamReader对象,构造方法中传递字节输入流和指定的编码表名称GBK 2.创建OutputStreamwriter对象,构造方法中传递字符输出流和指定的编码表名称UTF-8 3.使用InputStreamReader对象中的方法read读取文件 4.使用OutputStreamwriter对象中的方法writer,把读取的数据写入到文件中 5.释放资源 */
public class Demo03Test {
public static void main(String[] args) throws IOException {
//1.创建InputStreamReader对象,构造方法中传递字节输入流和指定的编码表名称GBK
InputStreamReader isr = new InputStreamReader(new FileInputStream("10_IO_gbk_8.txt"),"GBK");
//2.创建OutputStreamwriter对象,构造方法中传递字符输出流和指定的编码表名称UTF-8
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("10_IO_utf格式的文件.txt"),"utf-8");
//3.使用InputStreamReader对象中的方法read读取文件
int len = 0;
while((len = isr.read())!=-1){
//4.使用OutputStreamwriter对象中的方法writer,把读取的数据写入到文件中
osw.write(len);
}
//5.释放资源
osw.close();
isr.close();
}
}

运行结果:
《Java学习笔记③③(转换流、字符编码和字符集、 编码引出的问题、InputStreamReader类、OutputStreamWriter类、练习:转换文件编码)》


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
author-avatar
jac
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有