关于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”))