Chinaunix首页 | 论坛 | 博客
  • 博客访问: 942232
  • 博文数量: 146
  • 博客积分: 3321
  • 博客等级: 中校
  • 技术积分: 1523
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-29 10:32
文章分类

全部博文(146)

文章存档

2014年(2)

2013年(5)

2012年(4)

2011年(6)

2010年(30)

2009年(75)

2008年(24)

分类: Java

2008-12-21 00:02:44

 
最近在写一个程序时遇到这样一个问题。
题目要求:想文件t1.txt中写入double型的数据然后在从文件t1.txt中读出并打印。
这本来是很简单的一个程序,可是我在写的时候却遇到了问题。下面是我的代码:
import java.io.*;
class TestDataRead{
   public static void main(String[] args){
    
      DataInputStream dis = null;
      DataOutputStream dos = null;
     
      try{
         dos = new DataOutputStream(new FileOutputStream("t1.txt"));
         dis = new DataInputStream(new FileInputStream(“t1.txt"));
      }catch(FileNotFoundException e){
         System.out.println("文件打开失败");
         System.exit(-1);
      }
    
     double d;
   
     try{       
        for(int i=1; i<3; i++){
           dos.writeDouble((double)(i*10));//向文件中写入9个double型的数据
        }    
         dos.flush();
         dos.close();
        
       
while((d=dis.readDouble()) != -1){ //开始从文件中读取数据
           
            System.out.println(d);  //打印出数据
         }
         dis.close();
      }catch(IOException e){
          System.out.println(e);
          e.printStackTrace();
          System.exit(-1);
      }
      }
}
 
 
程序结果:
         10.0
         20.0
         java.io.EOFException
这里抛出了一个例外。
查看API关于readDouble()方法的定义:
 
 

readDouble

public final double readDouble()
                        throws 
参见 DataInputreadDouble 方法的常规协定。

从包含的输入流中读取此操作需要的字节。

指定者:
接口 中的
返回:
此输入流的下八个字节,将它们解释为一个 double
抛出:
- 如果此输入流在读取这八个字节之前到达末尾。
- 该流已关闭并且包含的输入流在关闭后不支持读取操作,或者发生其他 I/O 错误。
可以看出
若选择用readDouble()每次读出一个double数据,那么所有值都是有效的,所以不可再用返回值来侦测何时结束输入。相反,可用available()方法判断有多少字符可用。故将源代码中的红色部分代码用一下代码替换则可以的到预期效果。
 
   while(dis.available() != 0){
            d = dis.readDouble();
            System.out.println(d);
         }
dis.available()用来判断还有多少字符可供读入。
阅读(3152) | 评论(0) | 转发(0) |
0

上一篇:解读程式流程

下一篇:java gui学习

给主人留下些什么吧!~~