1

所以我是一个 Java 新手,开始玩一些文件。假设我有一些文件“tes.t”,其中包含我已知类型的数据——假设它们是 int-double-int-double 等等。不过,我不知道里面有多少这样的对 - 我怎样才能确保输入已经完成?根据我目前的知识,我想到了这样的事情:

try{
        DataInputStream reading = new DataInputStream(new FileInputStream("tes.t"));
        while(true)
        {
            System.out.println(reading.readInt());
            System.out.println(reading.readDouble());
        }
        }catch(IOException xxx){}
}

然而,这里的这个无限循环让我有点不舒服。我的意思是 - 我猜 IOException 应该在输入完成后立即赶上,但我不确定这是否是一个好方法。有没有更好的方法来做到这一点?或者更确切地说-什么是更好的方法,因为我确定我的方法不好:)

4

4 回答 4

3

由于您的文件具有 int-double 对,您可以执行以下操作:

DataInputStream dis = null;
try {
    dis = new DataInputStream(new FileInputStream("tes.t"));
    int i = -1;
    // readInt() returns -1 if end of file...
    while ((i=dis.readInt()) != -1) {
        System.out.println(i);
        // since int is read, it must have double also..
        System.out.println(dis.readDouble());
    }

} catch (EOFException e) {
    // do nothing, EOF reached

} catch (IOException e) {
    // handle it

} finally {
    if (dis != null) {
        try {
            dis.close();

        } catch (IOException e) {
             // handle it
        }
    }
}
于 2012-11-06T19:53:32.197 回答
2

您可以执行以下操作:

try{
  FileInputStream fstream = new FileInputStream("tes.t");
  DataInputStream in = new DataInputStream(fstream);
  BufferedReader br = new BufferedReader(new InputStreamReader(in));
  String strLine;
  //Read File Line By Line
  while ((strLine = br.readLine()) != null)   {
  System.out.println (strLine);
  }
  //Close the input stream
  in.close();
  }catch (IOException e){//Catch exception if any
 System.err.println("Error: " + e.getMessage());
 }

注意:此代码未经测试。

于 2012-11-06T19:38:13.037 回答
1

这是来自javadoc:

抛出:EOFException - 如果此输入流在读取四个字节之前到达末尾。

这意味着您可以EOFException确保 EOF 已达到。您还可以添加某种应用程序级别标记,显示文件已被完全读取。

于 2012-11-06T19:35:59.127 回答
0

这个怎么样:

DataInputStream dis = null;
try {
    dis = new DataInputStream(new FileInputStream("tes.t"));
    while (true) {
        System.out.println(dis.readInt());
        System.out.println(dis.readDouble());
    }

} catch (EOFException e) {
    // do nothing, EOF reached

} catch (IOException e) {
    // handle it

} finally {
    if (dis != null) {
        try {
            dis.close();

        } catch (IOException e) {
            // handle it
        }
    }
}
于 2012-11-06T19:41:38.043 回答