今天在练习io流的时候出现了一些问题
read读出来的数字一直比文本字符大,多的会输出空格
并且不管输入什么中文字符串首字符都是乱码
Java的io流输出有空格且首字符乱码
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- MR_ZhiEr 2022-01-14 18:41关注
两个问题, 其实楼上已经给出代码了, 这里我解释下
- 多出许多空格: 因为你把读取的内容读取到数组中去了, 数组的长度设置长了 打印的 时候 直接把数组整个打印了, 数组内没有被字符占用的 就变成空格了
解决办法是: 打印的时候只打印读取到的数组长度 - 中文乱码: 因为中文 GBK 编码 是2个字节每个汉字, utf-8 编码是 3个字节每个汉字, 你读取用的FileInputStream是字节流, 一次只读取一个字节, 这就造成了 虚拟机不知道哪几个字节是一个汉字, 该用哪个编码表解码, 所以会乱码
解决办法是: 指定编码表, 要么麻烦的 使用 字节流读取, 使用转换流指定编码解码 要么 直接使用字符流读取, 直接指定编码表就可以了
另外再提一下的是每个字母是占一个字符的
```java
//1.写文件OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("a.txt"),"gbk"); String s ="春风扶栏露华浓"; //1.1 字符串转成字符数组 char[] c = s.toCharArray(); //1.2 开始写入文件 osw.write(c); //1.3 释放资源 osw.close();
//2. 读取文件 //2.1 获取输入流, 用转换流 编码 InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"), Charset.forName("gbk")); //2.2 定义一个int类型的变量, 用来存 一次读取到数组中的长度 int len; //2.3 定义一个char类型的数组, 用来存读取到的内容 char[] chars = new char[1024]; //2.4 读取内容到数组中, 每次读取的长度是 len while ((len= isr.read(chars))!=-1){ //2.5 利用字符串的构造方法, 把char数组变成 字符串 String s1 = new String(chars,0,len); System.out.println(s1); } //2.6 释放资源 isr.close();
```
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 - 多出许多空格: 因为你把读取的内容读取到数组中去了, 数组的长度设置长了 打印的 时候 直接把数组整个打印了, 数组内没有被字符占用的 就变成空格了
悬赏问题
- ¥15 利用加权最小二乘法求亚马逊各类商品的价格指标?怎么求?
- ¥15 c++ word自动化,为什么可用接口是空的?
- ¥15 Matlab计算100000*100000的矩阵运算问题:
- ¥50 VB6.0如何识别粘连的不规则的数字图片验证码
- ¥16 需要完整的这份订单所有的代码,可以加钱
- ¥30 写一个带界面控制的机房电脑一键开机关机并且实时监控的软件
- ¥15 Stata数据分析请教
- ¥15 请教如何为VS2022搭建 Debug|win32的openCV环境?
- ¥15 关于#c++#的问题:c++如何使用websocketpp实现websocket接口调用,求示例代码和相关资料
- ¥15 51单片机的外部中断,按下按键后不能切换到另一个模式