求助!急!<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){}
}} 展开
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){}
}} 展开
3个回答
展开全部
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文件打开,里面写入这些数据了吗?
追答
写入了,但是是乱码的
展开全部
看你说的那样,你的问题不是在于程序,你所说的乱码只是发生在你直接打开txt的文件,是这样吧?
你可以打开你的txt文件,然后选择文件->另存为,之后选择编码方式。
你就会在保存前面,看到有个叫 编码的东西,之后你选择UTF-8另存为即可
你可以打开你的txt文件,然后选择文件->另存为,之后选择编码方式。
你就会在保存前面,看到有个叫 编码的东西,之后你选择UTF-8另存为即可
追答
后台输出正常。。
我用notepad打开过看,在查看文件内容的时候,设置编码为utf-8就能看得到中文字符了。。
但是,你前面写的数值,是看不了的。原因就是,txt记录的是字符串/字符,而你写进去的是以二进制形式写过去的,故而,你这里看不到你之前写的数值,因而出现了你所说的“乱码”
其实,你把东西写到文本里面,不要用那么的复杂。
建议
1、文本里面的全部 是统一编码的字符串
2、文本里面就全部直接记录一个序列化了的类
如果文本想直接给别人看的话,当然是选择第一种了,我想几乎没有人会看得懂二进制表示的字符。第二种则是方便你记录数据。。
当然,如果你要两者都做到的话,办法也是有的,其中一种就是把所有东西用一个统一的格式记录,不论你是int还是double,全部转换为字符串
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这种情况只有out_data.writeUTF("My son,a lovely boy.我喜欢旅游!");是UTF-8编码
可以正常显示,你把所有的写入都换成writeUTF即可
读取的时候也是readUTF读完后转型就可以
可以正常显示,你把所有的写入都换成writeUTF即可
读取的时候也是readUTF读完后转型就可以
追问
可是这句也没法正常读出来啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询