日期:2014-05-20  浏览次数:20775 次

关于IO的两个问题
第一个:
try   {
DataOutputStream   out2   =   new   DataOutputStream(
new   BufferedOutputStream(
new   FileOutputStream( "Demo.txt ")));//我将Demo.txt打开
out2.writeDouble(3.14159);//里面的Double都是乱码,这时怎么
out2.writeUTF( "That   was   pi ");//回事,谢谢
out2.writeDouble(1.41413);
out2.writeUTF( "Square   root   of   2 ");
out2.close();
DataInputStream   in5   =   new   DataInputStream(
new   BufferedInputStream(
new   FileInputStream( "Data.txt ")));
//   Must   use   DataInputStream   for   data:
System.out.println(in5.readDouble());
//   Only   readUTF()   will   recover   the
//   Java-UTF   String   properly:
System.out.println(in5.readUTF());
//   Read   the   following   double   and   String:
System.out.println(in5.readDouble());
System.out.println(in5.readUTF());
}   catch(EOFException   e)   {
throw   new   RuntimeException(e);
}
第二个:
我的Text.java文件在最前面写了package   qwe;
然后用Text.java中的BufferedReader   in   =   new   BufferedReader(new   FileReader(“Text.java”));说系统找不到文件,但将package去掉就找的到,那该怎么调用才行?

------解决方案--------------------
1、DataOutputStream 的writeDouble方法使用 Double 类中的 doubleToLongBits 方法将 double 参数转换为一个 long 值,然后将该 long 值以 8-byte 值形式写入基础输出流中,先写入高字节。如果没有抛出异常,则计数器 written 增加 8。
因此你在要读回来的时候需要用Double.longBitsToDouble(long bits) 来将其正确读回来。用txt直接看的时候没有这个过程,自然就乱码了。之所以这么处理是为了保持double数据的精度,否则把7.7按字符串保存,读取的时候把7.7转化成double很可能损失精度,比如变成7.6999999999
2、BufferedReader in = new BufferedReader(new FileReader(“qwe/Text.java”))