转换流(避免乱码情况)

基本介绍:

1.InputStreamReader:Reader的子类,可以将InputStream(字节流)包装成(转换)Reader(字符流)

2.OutputStreamWriter:Writer的子类,实现将OutputStream(字节流)包装成Writer(字符流)

3.当处理纯文本数据时,如果使用字符流效率更高,并且可以有效解决中文问题,所以建议将字节流转换成字符流

4.可以在使用时指定编码格式(utf-8, gbk, gb2312, iso8859-1等)

InputStreamReader

说明:字节流FileInputStream包装成(转换成)字符流InputStreamReader;对文件进行读取(按照utf-8/gbk格式),进而在包装成BufferedReader

//演示使用 InputStreamReader转换流解决中文问题
//将字节流转换成字符流  ,并指定编码
​
//1.需要操作的文件地址
String fileName = "d:\\work\\new03.txt";
​
//2.创建对象,作用:将 FileInputStream(fileName)转成InputStreamReader;并指定编码
InputStreamReader isr= new InputStreamReader(new FileInputStream(fileName),"gbk");
​
//3.包装流:将InputStreamReader 传入BufferedReader
BufferedReader br = new BufferedReader(isr);
​
//4.读取数据
String str = br.readLine();
System.out.println("读取数据:" + str);
​
//5.关闭流
br.close();

OutputStreamWriter

说明:字节流FileOutputStream 包装成(转换成)字符流 OutoutStreamWriter,对文件进行写入

(按照gbk格式,可以指定其他,例如 utf-8)

//演示OutputStreamWriter使用
//FileOutputStream字节流转换成字符流OutputStreamWriter
//指定处理的编码格式
​
//1.设置路径
String fileName = "d:\\work\\craft.txt";
//2.创建对象:将FileOutputStream转换成OutputStreamWriter
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(fileName),"utf8");
//3.写入数据
osw.write("你好世界 hello-world!!");
//4.关闭流
osw.close();

PrintStream:字节打印流

打印流只有输出流,没有输入流

//1.字节打印流
PrintStream out =System.out;
​
//print的底层也使用了write
//2.1在默认的情况下,PrintStream 输出数据的位置是,标准输出,即显示器
out.println("hello - world");
//2.2因为print底层使用的是write,所以我们可以直接调用write进行打印/输出
out.write("黄河入海流".getBytes());
​
//3.修改打印输出流的位置
System.setOut(new PrintStream("d:\\work\\out.txt"));
System.out.println("欲穷千里目,更上一层楼");//输出到 out.txt文件中
​
//4.关闭流
out.close();

PrintWriter:字符打印流

//PrintWriter printWriter = new PrintWriter(System.out);
PrintWriter printWriter = new PrintWriter(new FileWriter("d:\\work\\out02.txt"));
printWriter.print("hello - world!!");
​
//关闭流,必须关闭流才能写入数据
printWriter.close();

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在Java中,字符输出码通常是由于编码不一致导致的。在引用\[1\]中的代码示例中,使用了getBytes方法将字符串转换为字节数组,并指定了编码为UTF-8。然后在引用\[2\]中的代码示例中,使用了OutputStreamWriter将字节转换为字符,并指定了编码为utf-8。这样可以确保写入文件时使用了相同的编码。如果在读取文件时仍然出现码,可能是因为读取文件时没有指定正确的编码。可以尝试在读取文件时使用相同的编码进行解码,如使用InputStreamReader并指定编码为UTF-8。这样可以确保读取文件时使用了正确的编码,从而避免码问题。 #### 引用[.reference_title] - *1* *2* [IO 字符](https://blog.csdn.net/Pan_BY/article/details/99960278)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [java字符的处理中文码,使用方法](https://blog.csdn.net/Wenaizi/article/details/99970634)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jhan&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值