求助!急!<java疑问>,输入输出流的,为什么此代码无法实现正确的数据写入?文件里是一堆乱码

题:现有文件jerry.txt,请向里面写入下列类型的数据,然后再把它们一次读取出来。publicclassDaraStrea{publicstaticvoidmain(... 题:现有文件jerry.txt,请向里面写入下列类型的数据,然后再把它们一次读取出来。
public class DaraStrea{
public static void main(String[] args) {
try{

FileOutputStream fos=new FileOutputStream("src/helloDir/jerry.txt");
DataOutputStream out_data=new DataOutputStream(fos);
out_data.writeInt(100);
out_data.writeFloat(3.14f);
out_data.writeDouble(3.1415d);
out_data.writeLong(1234567891);
out_data.writeBoolean(true);
out_data.writeInt(1001);
out_data.writeUTF("My son,a lovely boy.我喜欢旅游!");
}catch(IOException e){}
try{
FileInputStream fin=new FileInputStream("src/helloDir/jerry.txt");
DataInputStream in_data=new DataInputStream(fin);
System.out.println(":"+in_data.readInt());
System.out.println(":"+in_data.readFloat());
System.out.println(":"+in_data.readDouble());
System.out.println(":"+in_data.readLong());
System.out.println(":"+in_data.readBoolean());
System.out.println(":"+in_data.readInt());
System.out.println(":"+in_data.readUTF());
}catch(IOException e){}
}}
展开
 我来答
977657205
推荐于2017-10-01 · TA获得超过452个赞
知道小有建树答主
回答量:332
采纳率:100%
帮助的人:223万
展开全部

catch异常的时候要打印异常,输入输出流使用后要记得关闭。查查看是不是编码的问题。

package test;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class t2 {
public static void main(String[] args) {
try {

FileOutputStream fos = new FileOutputStream(
"C:\\Users\\LR\\Desktop\\test.txt");
DataOutputStream out_data = new DataOutputStream(fos);
out_data.writeInt(100);
out_data.writeFloat(3.14f);
out_data.writeDouble(3.1415d);
out_data.writeLong(1234567891);
out_data.writeBoolean(true);
out_data.writeInt(1001);
out_data.writeUTF("My son,a lovely boy.我喜欢旅游!");
} catch (IOException e) {
e.printStackTrace();
}
try {
FileInputStream fin = new FileInputStream("C:\\Users\\LR\\Desktop\\test.txt");
DataInputStream in_data = new DataInputStream(fin);
System.out.println(":" + in_data.readInt());
System.out.println(":" + in_data.readFloat());
System.out.println(":" + in_data.readDouble());
System.out.println(":" + in_data.readLong());
System.out.println(":" + in_data.readBoolean());
System.out.println(":" + in_data.readInt());
System.out.println(":" + in_data.readUTF());
} catch (IOException e) {
e.printStackTrace();
}
}
}
更多追问追答
追问
请问,执行完后,你把test.txt文件打开,里面写入这些数据了吗?
追答
写入了,但是是乱码的
Stale331x
2013-12-15 · TA获得超过1299个赞
知道小有建树答主
回答量:1276
采纳率:33%
帮助的人:832万
展开全部
看你说的那样,你的问题不是在于程序,你所说的乱码只是发生在你直接打开txt的文件,是这样吧?
你可以打开你的txt文件,然后选择文件->另存为,之后选择编码方式。
你就会在保存前面,看到有个叫 编码的东西,之后你选择UTF-8另存为即可
追问

存了存了,按你说的方式存了,截图给你看吧但是保存之后打开依然是这样。

追答
后台输出正常。。
我用notepad打开过看,在查看文件内容的时候,设置编码为utf-8就能看得到中文字符了。。
但是,你前面写的数值,是看不了的。原因就是,txt记录的是字符串/字符,而你写进去的是以二进制形式写过去的,故而,你这里看不到你之前写的数值,因而出现了你所说的“乱码”
其实,你把东西写到文本里面,不要用那么的复杂。
建议
1、文本里面的全部 是统一编码的字符串
2、文本里面就全部直接记录一个序列化了的类

如果文本想直接给别人看的话,当然是选择第一种了,我想几乎没有人会看得懂二进制表示的字符。第二种则是方便你记录数据。。
当然,如果你要两者都做到的话,办法也是有的,其中一种就是把所有东西用一个统一的格式记录,不论你是int还是double,全部转换为字符串
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友cbad167
2013-12-15 · TA获得超过309个赞
知道小有建树答主
回答量:388
采纳率:66%
帮助的人:295万
展开全部
这种情况只有out_data.writeUTF("My son,a lovely boy.我喜欢旅游!");是UTF-8编码

可以正常显示,你把所有的写入都换成writeUTF即可
读取的时候也是readUTF读完后转型就可以
追问
可是这句也没法正常读出来啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式