如何在从文件读取时跳过原始数据值

时间:2016-02-28 11:34:18

标签: java file fileinputstream datainputstream

我编写了一个从文件中读取整数的Java程序。之前使用以下代码将五个整数写入该文件:

Scanner s=new Scanner(System.in);
DataOutputStream d=null;
System.out.println("Enter 5 integers");
try{
    d=new DataOutputStream(new FileOutputStream("num.dat"));
    for(int i=1;i<=5;i++){
    d.writeInt(s.nextInt());
    } //for
} //try
catch(IOException e){
    System.out.println(e.getMessage());
    System.exit(0);
}
finally{
    try{
        d.close()
    }
    catch(Exception e){}
}//finally

现在,当从文件 num.dat 中读取整数时,我希望跳过&#39; n&#39;整数。我在另一个类中使用了以下代码:

DataInputStream d=null;
Scanner s=new Scanner(System.in);
int n=0; //stores no. of integers to be skipped
try{
    d=new DataInputStream(new FileInputStream("num.dat");
    for (...){
        if(...)
        n++; //condition to skip integers
    } //for
}//try
catch(IOException e){
    System.out.println(e.getMessage());
    System.exit(0);
}
finally{
    try{
        d.skip(n); //skips n integers
        System.out.println("Requested Integer is "+d.readInt());
        d.close();
    }
    catch(Exception e) {}
} //finally

只有在我请求文件的第一个整数时,程序才会显示正确的输出。如果我试图跳过一些整数,它会输出或输出错误。我在第一个程序中输入的整数不是一位数而是三位整数。我也试图跳过三位数整数的个别数字,但这也没有帮助。请告诉我在阅读原始数据值时如何跳过。

1 个答案:

答案 0 :(得分:0)

d.skip(n); //skips n integers

skip(long n)方法的这种解释是不正确的:它跳过n 字节,而不是n整数:

  

跳过并丢弃输入流中的n个字节数据。

要解决此问题,请编写自己的方法,调用d.readInt() n次,并丢弃结果。你也可以在没有方法的情况下完成,只需添加一个循环:

try {
    //skips n integers
    for (int i = 0 ; i != n ; i++) {
        d.readInt();
    }
    System.out.println("Requested Integer is "+d.readInt());
    d.close();
}
catch(Exception e) {}